English | 日本語

概要

exametrikaパッケージは、教育テストデータを分析するための包括的なテストデータエンジニアリングツールを提供します。荘島(2022)で説明されている方法に基づき、このパッケージは研究者と実務家に以下の機能を提供します:

  • テスト応答パターンと項目特性の分析
  • 様々な心理測定モデルを用いた受験者の分類
  • テストデータにおける潜在構造の調査
  • 項目間の局所依存性の検討
  • 項目関係のネットワーク分析

このパッケージは、伝統的な心理測定学的アプローチと先進的な統計手法の両方を実装しており、様々なアセスメントや研究目的に適しています。

機能

本パッケージは以下の心理測定モデルと技法を実装しています:

古典的手法

  • 古典的テスト理論(CTT)
    • 項目の難易度と識別力
    • テストの信頼性と妥当性
  • 項目反応理論(IRT)
    • 2PL、3PL、4PLモデル
    • 項目特性曲線
    • テスト情報関数

潜在構造分析

  • 潜在クラス分析(LCA)
    • クラスメンバーシップの推定
    • 項目応答プロファイル
  • 潜在ランク分析(LRA)
    • 順序付き潜在クラス
    • ランク遷移確率
  • バイクラスタリングとランククラスタリング
    • 項目と受験者の同時クラスタリング
    • フィールド固有の応答パターン
  • 無限関係モデル(IRM)
    • 最適なクラス/フィールド数の決定
    • ノンパラメトリッククラスタリング

モデルの概要

局所依存モデル

本パッケージは、テストデータにおける局所依存性をモデル化する3つの相補的なアプローチを実装しています:

  1. 局所依存潜在ランク分析(LDLRA)
    • 項目間の依存関係が異なる習熟度ランクでどのように変化するかを分析
    • 項目間の関係が学習者の能力レベルによって変化すると予想される場合に適している
    • LRAとベイジアンネットワークの長所を組み合わせたモデル
  2. 局所依存バイクラスタリング(LDB)
    • 各ランク内における項目フィールド間の関係に焦点
    • 項目が自然なグループ(フィールド)を形成し、階層的な関係を持つ場合に最適
    • バイクラスタリングとフィールドレベルの依存構造を統合
  3. バイクラスターネットワークモデル(BINET)
    • 各フィールド内でのクラス遷移を検討
    • 複雑なクラス進行パターンの理解に最適
    • バイクラスタリングとクラスレベルのネットワーク分析を組み合わせたモデル

モデル選択ガイド

モデル 主な焦点 適用場面
LDLRA 項目レベルの依存関係 項目関係が習熟度によって変化する場合
LDB フィールドレベルの構造 項目が自然なグループを形成し依存関係を持つ場合
BINET クラス進行 フィールド内に複雑な学習パターンが存在する場合

背景

Exametrikaは、もともとMathematicaとExcelのアドインとして開発・公開されていました。Exametrikaに関する詳細な情報は以下をご覧ください:

インストール

exametrikaの開発版はGitHubからインストールできます:

# devtoolsがインストールされていない場合は、まずインストール
if (!require("devtools")) install.packages("devtools")

# Exametrikaのインストール
devtools::install_github("kosugitti/exametrika")

依存パッケージ

本パッケージには以下が必要です:

  • R (>= 4.1.0)
  • igraph (ネットワーク分析用)
  • その他の依存パッケージは自動的にインストールされます

データ形式と使用方法

基本的な使用方法

library(exametrika)

データ要件

Exametrikaは2値データと多値データの両方に対応しています:

  • 2値データ(0/1)
    • 0:誤答
    • 1:正答
  • 多値データ
    • 順序のある反応カテゴリ
    • 複数の得点レベル
  • 欠測値
    • NA値がサポートされています
    • カスタムの欠測値コードを指定可能

入力データの仕様

本パッケージは以下の特徴を持つ複数の形式のデータを受け付けます:

  1. データ構造
    • 行列またはデータフレーム形式
    • 反応データ(2値または多値)
    • 柔軟な欠測値の取り扱い
    • 様々なデータ型と構造のサポート
  2. オプション要素
    • 受験者IDの列(デフォルト:最初の列)
    • 項目の重み(デフォルト:すべての重み = 1)
    • 項目ラベル(デフォルト:連番)
    • 欠測値指示行列

注:分析手法によって、特定のデータ型要件がある場合があります。詳細は各関数のドキュメントを参照してください。

データフォーマット

dataFormat関数は分析用の入力データを前処理します:

  • 機能
    • IDベクトルの抽出と検証
    • 項目ラベルの処理または連番の割り当て
    • 反応データ行列Uの作成
    • 欠測値指示行列Zの生成
    • 項目の重みの処理
    • 分析に適した形式へのデータ変換

例:

# Format raw data for analysis
data <- dataFormat(J15S500) # Using sample dataset
str(data) # View structure of formatted data
#> List of 7
#>  $ ID           : chr [1:500] "Student001" "Student002" "Student003" "Student004" ...
#>  $ ItemLabel    : chr [1:15] "Item01" "Item02" "Item03" "Item04" ...
#>  $ Z            : num [1:500, 1:15] 1 1 1 1 1 1 1 1 1 1 ...
#>   ..- attr(*, "dimnames")=List of 2
#>   .. ..$ : NULL
#>   .. ..$ : chr [1:15] "Item01" "Item02" "Item03" "Item04" ...
#>  $ w            : num [1:15] 1 1 1 1 1 1 1 1 1 1 ...
#>  $ response.type: chr "binary"
#>  $ categories   : Named int [1:15] 2 2 2 2 2 2 2 2 2 2 ...
#>   ..- attr(*, "names")= chr [1:15] "Item01" "Item02" "Item03" "Item04" ...
#>  $ U            : num [1:500, 1:15] 0 1 1 1 1 1 0 0 1 1 ...
#>   ..- attr(*, "dimnames")=List of 2
#>   .. ..$ : NULL
#>   .. ..$ : chr [1:15] "Item01" "Item02" "Item03" "Item04" ...
#>  - attr(*, "class")= chr [1:2] "exametrika" "exametrikaData"

サンプルデータセット

本パッケージには、荘島(2022)からの様々なサンプルデータセットが学習用に含まれています:

  • 命名規則:JxxSxxx形式
    • J:項目数(例:J15 = 15項目)
    • S:サンプルサイズ(例:S500 = 500人の受験者)

利用可能なデータセット: - J5S10:非常に小さなデータセット(5項目、10人の受験者) - クイックテストと基本概念の理解に有用 - J12S5000:大規模サンプルデータセット(12項目、5000人の受験者) - LDLRAなどの高度な分析に適している - J14S500:中規模データセット(14項目、500人の受験者) - J15S500:中規模データセット(15項目、500人の受験者) - IRTとLCAの例でよく使用 - J20S400:中規模データセット(20項目、400人の受験者) - J35S515:大規模項目データセット(35項目、515人の受験者) - バイクラスタリングとネットワークモデルの例で使用 - J15S3810: 順序尺度データセット(15 項目 4件法, 3810人の受験者) - 順序尺度版潜在ランクモデルに用います - J35S5000: 多肢選択(名義的)データセット (35項目, 5000人の受験者) - 反応カテゴリと正答ラベルがデータセットに含まれています - 名義尺度版潜在ランクモデルに用います。

使用例

テスト統計量

TestStatistics(J15S500)
#> Test Statistics
#>                   value
#> TestLength   15.0000000
#> SampleSize  500.0000000
#> Mean          9.6640000
#> SEofMean      0.1190738
#> Variance      7.0892826
#> SD            2.6625707
#> Skewness     -0.4116220
#> Kurtosis     -0.4471624
#> Min           2.0000000
#> Max          15.0000000
#> Range        13.0000000
#> Q1.25%        8.0000000
#> Median.50%   10.0000000
#> Q3.75%       12.0000000
#> IQR.75%       4.0000000
#> Stanine.4%    5.0000000
#> Stanine.11%   6.0000000
#> Stanine.23%   7.0000000
#> Stanine.40%   9.0000000
#> Stanine.60%  11.0000000
#> Stanine.77%  12.0000000
#> Stanine.89%  13.0000000
#> Stanine.96%  14.0000000

項目統計量

ItemStatistics(J15S500)
#> Item Statistics
#>    ItemLabel  NR   CRR  ODDs Threshold Entropy ITCrr
#> 1     Item01 500 0.746 2.937    -0.662   0.818 0.375
#> 2     Item02 500 0.754 3.065    -0.687   0.805 0.393
#> 3     Item03 500 0.726 2.650    -0.601   0.847 0.321
#> 4     Item04 500 0.776 3.464    -0.759   0.767 0.503
#> 5     Item05 500 0.804 4.102    -0.856   0.714 0.329
#> 6     Item06 500 0.864 6.353    -1.098   0.574 0.377
#> 7     Item07 500 0.716 2.521    -0.571   0.861 0.483
#> 8     Item08 500 0.588 1.427    -0.222   0.978 0.405
#> 9     Item09 500 0.364 0.572     0.348   0.946 0.225
#> 10    Item10 500 0.662 1.959    -0.418   0.923 0.314
#> 11    Item11 500 0.286 0.401     0.565   0.863 0.455
#> 12    Item12 500 0.274 0.377     0.601   0.847 0.468
#> 13    Item13 500 0.634 1.732    -0.342   0.948 0.471
#> 14    Item14 500 0.764 3.237    -0.719   0.788 0.485
#> 15    Item15 500 0.706 2.401    -0.542   0.874 0.413

CTT

CTT(J15S500)
#> Realiability
#>                 name value
#> 1  Alpha(Covariance) 0.625
#> 2         Alpha(Phi) 0.630
#> 3 Alpha(Tetrachoric) 0.771
#> 4  Omega(Covariance) 0.632
#> 5         Omega(Phi) 0.637
#> 6 Omega(Tetrachoric) 0.779
#> 
#> Reliability Excluding Item
#>    IfDeleted Alpha.Covariance Alpha.Phi Alpha.Tetrachoric
#> 1     Item01            0.613     0.618             0.762
#> 2     Item02            0.609     0.615             0.759
#> 3     Item03            0.622     0.628             0.770
#> 4     Item04            0.590     0.595             0.742
#> 5     Item05            0.617     0.624             0.766
#> 6     Item06            0.608     0.613             0.754
#> 7     Item07            0.594     0.600             0.748
#> 8     Item08            0.611     0.616             0.762
#> 9     Item09            0.642     0.645             0.785
#> 10    Item10            0.626     0.630             0.773
#> 11    Item11            0.599     0.606             0.751
#> 12    Item12            0.597     0.603             0.748
#> 13    Item13            0.597     0.604             0.753
#> 14    Item14            0.593     0.598             0.745
#> 15    Item15            0.607     0.612             0.759

IRT

IRT関数は、ロジスティックモデルを用いてパラメータを推定します。modelオプションで指定でき、2PL、3PL、4PLモデルに対応しています。

result.IRT <- IRT(J15S500, model = 3)
result.IRT
#> Item Parameters
#>        slope location lowerAsym PSD(slope) PSD(location) PSD(lowerAsym)
#> Item01 0.818   -0.834    0.2804      0.182         0.628         0.1702
#> Item02 0.860   -1.119    0.1852      0.157         0.471         0.1488
#> Item03 0.657   -0.699    0.3048      0.162         0.798         0.1728
#> Item04 1.550   -0.949    0.1442      0.227         0.216         0.1044
#> Item05 0.721   -1.558    0.2584      0.148         0.700         0.1860
#> Item06 1.022   -1.876    0.1827      0.171         0.423         0.1577
#> Item07 1.255   -0.655    0.1793      0.214         0.289         0.1165
#> Item08 0.748   -0.155    0.1308      0.148         0.394         0.1077
#> Item09 1.178    2.287    0.2930      0.493         0.423         0.0440
#> Item10 0.546   -0.505    0.2221      0.131         0.779         0.1562
#> Item11 1.477    1.090    0.0628      0.263         0.120         0.0321
#> Item12 1.479    1.085    0.0462      0.245         0.115         0.0276
#> Item13 0.898   -0.502    0.0960      0.142         0.272         0.0858
#> Item14 1.418   -0.788    0.2260      0.248         0.291         0.1252
#> Item15 0.908   -0.812    0.1531      0.159         0.383         0.1254
#> 
#> Item Fit Indices
#>        model_log_like bench_log_like null_log_like model_Chi_sq null_Chi_sq model_df null_df   NFI
#> Item01       -262.979       -240.190      -283.343       45.578      86.307       11      13 0.472
#> Item02       -253.405       -235.436      -278.949       35.937      87.025       11      13 0.587
#> Item03       -280.640       -260.906      -293.598       39.468      65.383       11      13 0.396
#> Item04       -204.884       -192.072      -265.962       25.623     147.780       11      13 0.827
#> Item05       -232.135       -206.537      -247.403       51.196      81.732       11      13 0.374
#> Item06       -173.669       -153.940      -198.817       39.459      89.755       11      13 0.560
#> Item07       -250.905       -228.379      -298.345       45.053     139.933       11      13 0.678
#> Item08       -314.781       -293.225      -338.789       43.111      91.127       11      13 0.527
#> Item09       -321.920       -300.492      -327.842       42.856      54.700       11      13 0.217
#> Item10       -309.318       -288.198      -319.850       42.240      63.303       11      13 0.333
#> Item11       -248.410       -224.085      -299.265       48.648     150.360       11      13 0.676
#> Item12       -238.877       -214.797      -293.598       48.160     157.603       11      13 0.694
#> Item13       -293.472       -262.031      -328.396       62.882     132.730       11      13 0.526
#> Item14       -223.473       -204.953      -273.212       37.040     136.519       11      13 0.729
#> Item15       -271.903       -254.764      -302.847       34.279      96.166       11      13 0.644
#>          RFI   IFI   TLI   CFI RMSEA    AIC    CAIC     BIC
#> Item01 0.376 0.541 0.443 0.528 0.079 23.578 -22.805 -22.783
#> Item02 0.512 0.672 0.602 0.663 0.067 13.937 -32.446 -32.424
#> Item03 0.287 0.477 0.358 0.457 0.072 17.468 -28.915 -28.893
#> Item04 0.795 0.893 0.872 0.892 0.052  3.623 -42.759 -42.737
#> Item05 0.260 0.432 0.309 0.415 0.086 29.196 -17.186 -17.164
#> Item06 0.480 0.639 0.562 0.629 0.072 17.459 -28.924 -28.902
#> Item07 0.620 0.736 0.683 0.732 0.079 23.053 -23.330 -23.308
#> Item08 0.441 0.599 0.514 0.589 0.076 21.111 -25.272 -25.250
#> Item09 0.074 0.271 0.097 0.236 0.076 20.856 -25.527 -25.505
#> Item10 0.211 0.403 0.266 0.379 0.075 20.240 -26.143 -26.121
#> Item11 0.618 0.730 0.676 0.726 0.083 26.648 -19.735 -19.713
#> Item12 0.639 0.747 0.696 0.743 0.082 26.160 -20.223 -20.201
#> Item13 0.440 0.574 0.488 0.567 0.097 40.882  -5.501  -5.479
#> Item14 0.679 0.793 0.751 0.789 0.069 15.040 -31.343 -31.321
#> Item15 0.579 0.727 0.669 0.720 0.065 12.279 -34.104 -34.082
#> 
#> Model Fit Indices
#>                    value
#> model_log_like -3880.769
#> bench_log_like -3560.005
#> null_log_like  -4350.217
#> model_Chi_sq     641.528
#> null_Chi_sq     1580.424
#> model_df         165.000
#> null_df          195.000
#> NFI                0.594
#> RFI                0.520
#> IFI                0.663
#> TLI                0.594
#> CFI                0.656
#> RMSEA              0.076
#> AIC              311.528
#> CAIC            -384.212
#> BIC             -383.882

推定された受験者集団の特性値は返り値オブジェクトに含まれています。

head(result.IRT$ability)
#>       tmp$ID         EAP       PSD
#> 1 Student001 -0.75526238 0.5805679
#> 2 Student002 -0.17398742 0.5473610
#> 3 Student003  0.01382355 0.5530509
#> 4 Student004  0.57628579 0.5749125
#> 5 Student005 -0.97449552 0.5915605
#> 6 Student006  0.85232605 0.5820542

プロットでは、項目反応曲線(IRF、これは項目特製曲線ICCと呼ばれることもあります)、テスト反応曲線 ( TRF )、項目情報曲線(IIC)、テスト情報曲線(TIC)のオプションが用意されており、それらはオプションで指定できます。項目はitems引数で指定でき、指定しない場合はすべての項目についてプロットが描かれます。プロット領域の分割はnrncで行数と列数を指定できます。

plot(result.IRT, type = "IRF", items = 1:6, nc = 2, nr = 3)

plot(result.IRT, type = "IRF", overlay = TRUE)

plot(result.IRT, type = "IIC", items = 1:6, nc = 2, nr = 3)

plot(result.IRT, type = "TRF")

plot(result.IRT, type = "TIC")

LCA

潜在クラス分析では、データセットとクラス数の指定が必要です。

LCA(J15S500, ncls = 5)
#> 
#> Item Reference Profile
#>          IRP1   IRP2    IRP3  IRP4  IRP5
#> Item01 0.5185 0.6996 0.76358 0.856 0.860
#> Item02 0.5529 0.6276 0.81161 0.888 0.855
#> Item03 0.7959 0.3205 0.93735 0.706 0.849
#> Item04 0.5069 0.5814 0.86940 0.873 1.000
#> Item05 0.6154 0.7523 0.94673 0.789 0.886
#> Item06 0.6840 0.7501 0.94822 1.000 0.907
#> Item07 0.4832 0.4395 0.83377 0.874 0.900
#> Item08 0.3767 0.3982 0.62563 0.912 0.590
#> Item09 0.3107 0.3980 0.26616 0.165 0.673
#> Item10 0.5290 0.5341 0.76134 0.677 0.781
#> Item11 0.1007 0.0497 0.00132 0.621 0.623
#> Item12 0.0355 0.1673 0.15911 0.296 0.673
#> Item13 0.2048 0.5490 0.89445 0.672 0.784
#> Item14 0.3508 0.7384 0.77159 0.904 1.000
#> Item15 0.3883 0.6077 0.82517 0.838 0.823
#> 
#> Test Profile
#>                               Class 1 Class 2 Class 3 Class 4 Class 5
#> Test Reference Profile          6.453   7.613  10.415  11.072  12.205
#> Latent Class Ditribution       87.000  97.000 125.000  91.000 100.000
#> Class Membership Distribution  90.372  97.105 105.238 102.800 104.484
#> 
#> Item Fit Indices
#>        model_log_like bench_log_like null_log_like model_Chi_sq null_Chi_sq model_df null_df   NFI
#> Item01       -264.179       -240.190      -283.343       47.978      86.307        9      13 0.444
#> Item02       -256.363       -235.436      -278.949       41.853      87.025        9      13 0.519
#> Item03       -237.888       -260.906      -293.598      -46.037      65.383        9      13 1.000
#> Item04       -208.536       -192.072      -265.962       32.928     147.780        9      13 0.777
#> Item05       -226.447       -206.537      -247.403       39.819      81.732        9      13 0.513
#> Item06       -164.762       -153.940      -198.817       21.644      89.755        9      13 0.759
#> Item07       -249.377       -228.379      -298.345       41.997     139.933        9      13 0.700
#> Item08       -295.967       -293.225      -338.789        5.483      91.127        9      13 0.940
#> Item09       -294.250       -300.492      -327.842      -12.484      54.700        9      13 1.000
#> Item10       -306.985       -288.198      -319.850       37.574      63.303        9      13 0.406
#> Item11       -187.202       -224.085      -299.265      -73.767     150.360        9      13 1.000
#> Item12       -232.307       -214.797      -293.598       35.020     157.603        9      13 0.778
#> Item13       -267.647       -262.031      -328.396       11.232     132.730        9      13 0.915
#> Item14       -203.468       -204.953      -273.212       -2.969     136.519        9      13 1.000
#> Item15       -268.616       -254.764      -302.847       27.705      96.166        9      13 0.712
#>          RFI   IFI   TLI   CFI RMSEA     AIC     CAIC      BIC
#> Item01 0.197 0.496 0.232 0.468 0.093  29.978   -7.972   -7.954
#> Item02 0.305 0.579 0.359 0.556 0.086  23.853  -14.097  -14.079
#> Item03 1.000 1.000 1.000 1.000 0.000 -64.037 -101.987 -101.969
#> Item04 0.678 0.828 0.744 0.822 0.073  14.928  -23.022  -23.004
#> Item05 0.296 0.576 0.352 0.552 0.083  21.819  -16.130  -16.112
#> Item06 0.652 0.843 0.762 0.835 0.053   3.644  -34.305  -34.287
#> Item07 0.566 0.748 0.625 0.740 0.086  23.997  -13.952  -13.934
#> Item08 0.913 1.000 1.000 1.000 0.000 -12.517  -50.466  -50.448
#> Item09 1.000 1.000 1.000 1.000 0.000 -30.484  -68.433  -68.415
#> Item10 0.143 0.474 0.179 0.432 0.080  19.574  -18.375  -18.357
#> Item11 1.000 1.000 1.000 1.000 0.000 -91.767 -129.716 -129.698
#> Item12 0.679 0.825 0.740 0.820 0.076  17.020  -20.930  -20.912
#> Item13 0.878 0.982 0.973 0.981 0.022  -6.768  -44.717  -44.699
#> Item14 1.000 1.000 1.000 1.000 0.000 -20.969  -58.919  -58.901
#> Item15 0.584 0.785 0.675 0.775 0.065   9.705  -28.244  -28.226
#> 
#> Model Fit Indices
#> Number of Latent class: 5
#> Number of EM cycle: 73 
#>                    value
#> model_log_like -3663.994
#> bench_log_like -3560.005
#> null_log_like  -4350.217
#> model_Chi_sq     207.977
#> null_Chi_sq     1580.424
#> model_df         135.000
#> null_df          195.000
#> NFI                0.868
#> RFI                0.810
#> IFI                0.950
#> TLI                0.924
#> CFI                0.947
#> RMSEA              0.033
#> AIC              -62.023
#> CAIC            -631.265
#> BIC             -630.995

返り値オブジェクトにはクラスメンバーシップ行列が含まれており、各受験者がどの潜在クラスに属するかを示します。推定値には最も高いメンバーシップ確率を持つものが含まれます。

result.LCA <- LCA(J15S500, ncls = 5)
head(result.LCA$Students)
#>      Membership 1 Membership 2 Membership 3 Membership 4 Membership 5 Estimate
#> [1,] 0.7839477684  0.171152798  0.004141844 4.075759e-02 3.744590e-12        1
#> [2,] 0.0347378747  0.051502214  0.836022799 7.773694e-02 1.698776e-07        3
#> [3,] 0.0146307878  0.105488644  0.801853496 3.343026e-02 4.459682e-02        3
#> [4,] 0.0017251650  0.023436459  0.329648386 3.656488e-01 2.795412e-01        4
#> [5,] 0.2133830569  0.784162066  0.001484616 2.492073e-08 9.702355e-04        2
#> [6,] 0.0003846482  0.001141448  0.001288901 8.733869e-01 1.237981e-01        4

プロットでは、IRP、CMP、TRP、LCDのオプションが用意されています。各プロットの詳細については荘島(2022)を参照してください。

plot(result.LCA, type = "IRP", items = 1:6, nc = 2, nr = 3)

plot(result.LCA, type = "CMP", students = 1:9, nc = 3, nr = 3)

plot(result.LCA, type = "TRP")

plot(result.LCA, type = "LCD")

LRA

潜在ランク分析では、データセットとランク数の指定が必要です。

LRA(J15S500, nrank = 6)
#> estimating method is  GTM 
#> Item Reference Profile
#>          IRP1   IRP2  IRP3  IRP4  IRP5  IRP6
#> Item01 0.5851 0.6319 0.708 0.787 0.853 0.898
#> Item02 0.5247 0.6290 0.755 0.845 0.883 0.875
#> Item03 0.6134 0.6095 0.708 0.773 0.801 0.839
#> Item04 0.4406 0.6073 0.794 0.882 0.939 0.976
#> Item05 0.6465 0.7452 0.821 0.837 0.862 0.905
#> Item06 0.6471 0.7748 0.911 0.967 0.963 0.915
#> Item07 0.4090 0.5177 0.720 0.840 0.890 0.900
#> Item08 0.3375 0.4292 0.602 0.713 0.735 0.698
#> Item09 0.3523 0.3199 0.298 0.282 0.377 0.542
#> Item10 0.4996 0.5793 0.686 0.729 0.717 0.753
#> Item11 0.0958 0.0793 0.136 0.286 0.472 0.617
#> Item12 0.0648 0.0982 0.156 0.239 0.421 0.636
#> Item13 0.2908 0.4842 0.715 0.773 0.750 0.778
#> Item14 0.4835 0.5949 0.729 0.849 0.933 0.977
#> Item15 0.3981 0.5745 0.756 0.827 0.835 0.834
#> 
#> Item Reference Profile Indices
#>        Alpha      A Beta     B Gamma        C
#> Item01     3 0.0786    1 0.585   0.0  0.00000
#> Item02     2 0.1264    1 0.525   0.2 -0.00787
#> Item03     2 0.0987    2 0.610   0.2 -0.00391
#> Item04     2 0.1864    1 0.441   0.0  0.00000
#> Item05     1 0.0987    1 0.647   0.0  0.00000
#> Item06     2 0.1362    1 0.647   0.4 -0.05198
#> Item07     2 0.2028    2 0.518   0.0  0.00000
#> Item08     2 0.1731    2 0.429   0.2 -0.03676
#> Item09     5 0.1646    6 0.542   0.6 -0.07002
#> Item10     2 0.1069    1 0.500   0.2 -0.01244
#> Item11     4 0.1867    5 0.472   0.2 -0.01650
#> Item12     5 0.2146    5 0.421   0.0  0.00000
#> Item13     2 0.2310    2 0.484   0.2 -0.02341
#> Item14     2 0.1336    1 0.484   0.0  0.00000
#> Item15     2 0.1817    2 0.574   0.2 -0.00123
#> 
#> Test Profile
#>                              Rank 1 Rank 2 Rank 3 Rank 4 Rank 5  Rank 6
#> Test Reference Profile        6.389  7.675  9.496 10.631 11.432  12.144
#> Latent Rank Ditribution      96.000 60.000 91.000 77.000 73.000 103.000
#> Rank Membership Distribution 83.755 78.691 81.853 84.918 84.238  86.545
#> 
#> Item Fit Indices
#>        model_log_like bench_log_like null_log_like model_Chi_sq null_Chi_sq model_df null_df   NFI
#> Item01       -264.495       -240.190      -283.343       48.611      86.307    9.233      13 0.437
#> Item02       -253.141       -235.436      -278.949       35.409      87.025    9.233      13 0.593
#> Item03       -282.785       -260.906      -293.598       43.758      65.383    9.233      13 0.331
#> Item04       -207.082       -192.072      -265.962       30.021     147.780    9.233      13 0.797
#> Item05       -234.902       -206.537      -247.403       56.730      81.732    9.233      13 0.306
#> Item06       -168.218       -153.940      -198.817       28.556      89.755    9.233      13 0.682
#> Item07       -250.864       -228.379      -298.345       44.970     139.933    9.233      13 0.679
#> Item08       -312.621       -293.225      -338.789       38.791      91.127    9.233      13 0.574
#> Item09       -317.600       -300.492      -327.842       34.216      54.700    9.233      13 0.374
#> Item10       -309.654       -288.198      -319.850       42.910      63.303    9.233      13 0.322
#> Item11       -242.821       -224.085      -299.265       37.472     150.360    9.233      13 0.751
#> Item12       -236.522       -214.797      -293.598       43.451     157.603    9.233      13 0.724
#> Item13       -287.782       -262.031      -328.396       51.502     132.730    9.233      13 0.612
#> Item14       -221.702       -204.953      -273.212       33.499     136.519    9.233      13 0.755
#> Item15       -267.793       -254.764      -302.847       26.059      96.166    9.233      13 0.729
#>          RFI   IFI   TLI   CFI RMSEA    AIC    CAIC     BIC
#> Item01 0.207 0.489 0.244 0.463 0.092 30.146  -8.785  -8.767
#> Item02 0.427 0.664 0.502 0.646 0.075 16.944 -21.987 -21.969
#> Item03 0.058 0.385 0.072 0.341 0.087 25.293 -13.638 -13.620
#> Item04 0.714 0.850 0.783 0.846 0.067 11.555 -27.375 -27.357
#> Item05 0.023 0.345 0.027 0.309 0.102 38.264  -0.667  -0.648
#> Item06 0.552 0.760 0.646 0.748 0.065 10.091 -28.840 -28.822
#> Item07 0.548 0.727 0.604 0.718 0.088 26.504 -12.427 -12.408
#> Item08 0.401 0.639 0.467 0.622 0.080 20.326 -18.605 -18.587
#> Item09 0.119 0.451 0.156 0.401 0.074 15.751 -23.180 -23.162
#> Item10 0.046 0.377 0.057 0.330 0.085 24.445 -14.486 -14.467
#> Item11 0.649 0.800 0.711 0.794 0.078 19.006 -19.925 -19.906
#> Item12 0.612 0.769 0.667 0.763 0.086 24.985 -13.946 -13.927
#> Item13 0.454 0.658 0.503 0.647 0.096 33.037  -5.894  -5.875
#> Item14 0.654 0.809 0.723 0.804 0.073 15.034 -23.897 -23.879
#> Item15 0.618 0.806 0.715 0.798 0.060  7.593 -31.338 -31.319
#> 
#> Model Fit Indices
#> Number of Latent rank: 6
#> Number of EM cycle: 17 
#>                    value
#> model_log_like -3857.982
#> bench_log_like -3560.005
#> null_log_like  -4350.217
#> model_Chi_sq     595.954
#> null_Chi_sq     1580.424
#> model_df         138.491
#> null_df          195.000
#> NFI                0.623
#> RFI                0.469
#> IFI                0.683
#> TLI                0.535
#> CFI                0.670
#> RMSEA              0.081
#> AIC              318.973
#> CAIC            -264.989
#> BIC             -264.712

推定された受験者のランクメンバーシップ確率とプロットは、LCA(潜在クラス分析)とほぼ同じです。潜在クラスにランキングが仮定されているため、ランクアップオッズとランクダウンオッズが計算されます。

result.LRA <- LRA(J15S500, nrank = 6)
head(result.LRA$Students)
#>      Membership 1 Membership 2 Membership 3 Membership 4 Membership 5 Membership 6 Estimate
#> [1,] 0.2704649921  0.357479353   0.27632327  0.084988078  0.010069050 0.0006752546        2
#> [2,] 0.0276546965  0.157616072   0.47438958  0.279914853  0.053715813 0.0067089816        3
#> [3,] 0.0228189795  0.138860955   0.37884545  0.284817610  0.120794858 0.0538621490        3
#> [4,] 0.0020140858  0.015608542   0.09629429  0.216973334  0.362406292 0.3067034562        5
#> [5,] 0.5582996437  0.397431414   0.03841668  0.003365601  0.001443909 0.0010427491        1
#> [6,] 0.0003866603  0.003168853   0.04801344  0.248329964  0.428747502 0.2713535842        5
#>      Rank-Up Odds Rank-Down Odds
#> [1,]    0.7729769      0.7565891
#> [2,]    0.5900527      0.3322503
#> [3,]    0.7518042      0.3665372
#> [4,]    0.8462973      0.5987019
#> [5,]    0.7118604             NA
#> [6,]    0.6328983      0.5791986
plot(result.LRA, type = "IRP", items = 1:6, nc = 2, nr = 3)

plot(result.LRA, type = "RMP", students = 1:9, nc = 3, nr = 3)

plot(result.LRA, type = "TRP")

plot(result.LRA, type = "LRD")

LRA 順序尺度データへの適用

LRAは順序尺度データにも適用することができます。サンプルデータJ15S3810は4件法15項目のデータで、これを3段階に分類します。micオプションは単調増加制約を課すものです。

result.LRAord <- LRA(J15S3810, nrank = 3, mic = TRUE)
#> Starting EM estimation for Saturation Model...
#> iter 1 logLik -0.715286                                                         iter 2 logLik -0.658925                                                         iter 3 logLik -0.650981                                                         iter 4 logLik -0.648033                                                         iter 5 logLik -0.646591                                                         iter 6 logLik -0.645385                                                         iter 7 logLik -0.644218                                                         iter 8 logLik -0.64299                                                          iter 9 logLik -0.641574                                                         iter 10 logLik -0.639918                                                        iter 11 logLik -0.638005                                                        iter 12 logLik -0.635832                                                        iter 13 logLik -0.63343                                                         iter 14 logLik -0.63086                                                         iter 15 logLik -0.628207                                                        iter 16 logLik -0.625554                                                        iter 17 logLik -0.622973                                                        iter 18 logLik -0.620517                                                        iter 19 logLik -0.618217                                                        iter 20 logLik -0.616089                                                        iter 21 logLik -0.614138                                                        iter 22 logLik -0.612356                                                        iter 23 logLik -0.610732                                                        iter 24 logLik -0.609254                                                        iter 25 logLik -0.607906                                                        iter 26 logLik -0.606672                                                        iter 27 logLik -0.605536                                                        iter 28 logLik -0.604488                                                        iter 29 logLik -0.603515                                                        iter 30 logLik -0.602612                                                        iter 31 logLik -0.601771                                                        iter 32 logLik -0.600989                                                        iter 33 logLik -0.600262                                                        iter 34 logLik -0.599589                                                        iter 35 logLik -0.598965                                                        iter 36 logLik -0.598389                                                        iter 37 logLik -0.597857                                                        iter 38 logLik -0.597367                                                        iter 39 logLik -0.596914                                                        iter 40 logLik -0.596497                                                        iter 41 logLik -0.596113                                                        iter 42 logLik -0.595757                                                        iter 43 logLik -0.595428                                                        iter 44 logLik -0.595121                                                        iter 45 logLik -0.594836                                                        iter 46 logLik -0.594568                                                        iter 47 logLik -0.594316                                                        iter 48 logLik -0.594078                                                        iter 49 logLik -0.59385                                                         iter 50 logLik -0.593631                                                        iter 51 logLik -0.593418                                                        iter 52 logLik -0.593211                                                        iter 53 logLik -0.59301                                                         iter 54 logLik -0.592816                                                        iter 55 logLik -0.59263                                                         iter 56 logLik -0.592452                                                        iter 57 logLik -0.592281                                                        iter 58 logLik -0.592118                                                        iter 59 logLik -0.591962                                                        iter 60 logLik -0.591813                                                        iter 61 logLik -0.591671                                                        iter 62 logLik -0.591534                                                        iter 63 logLik -0.591403                                                        iter 64 logLik -0.591277                                                        iter 65 logLik -0.591156                                                        iter 66 logLik -0.59104                                                         iter 67 logLik -0.590927                                                        iter 68 logLik -0.590819                                                        iter 69 logLik -0.590714                                                        iter 70 logLik -0.590613                                                        iter 71 logLik -0.590515                                                        iter 72 logLik -0.59042                                                         iter 73 logLik -0.590328                                                        iter 74 logLik -0.590238                                                        iter 75 logLik -0.590151                                                        iter 76 logLik -0.590065                                                        iter 77 logLik -0.589982                                                        iter 78 logLik -0.589899                                                        iter 79 logLik -0.589818                                                        iter 80 logLik -0.589738                                                        iter 81 logLik -0.589659                                                        iter 82 logLik -0.589581                                                        iter 83 logLik -0.589504                                                        iter 84 logLik -0.589427                                                        iter 85 logLik -0.589352                                                        iter 86 logLik -0.589277                                                        iter 87 logLik -0.589203                                                        iter 88 logLik -0.58913                                                         iter 89 logLik -0.589059                                                        iter 90 logLik -0.588988                                                        iter 91 logLik -0.588919                                                        iter 92 logLik -0.588851                                                        iter 93 logLik -0.588785                                                        iter 94 logLik -0.588721                                                        iter 95 logLik -0.588658                                                        iter 96 logLik -0.588597                                                        iter 97 logLik -0.588537                                                        iter 98 logLik -0.58848                                                         
#> Starting EM estimation for Restricted Model...
#> iter 1 logLik -0.667764                                                         iter 2 logLik -0.670426                                                         iter 3 logLik -0.671721                                                         iter 4 logLik -0.672335                                                         iter 5 logLik -0.672663                                                         iter 6 logLik -0.672853                                                         iter 7 logLik -0.67297                                                          iter 8 logLik -0.673045                                                         iter 9 logLik -0.673092

順序尺度の合計得点と推定されたランクの関係を可視化することができます。ScoreFreqはスコアの度数多角形とランクの閾値を表示し、ScoreRankはスコアとランク所属確率の関係をヒートマップで表現します。

plot(result.LRAord, type = "ScoreFreq")

plot(result.LRAord, type = "ScoreRank")

項目とランクの関係は、ICBRとICRPという2つの補完的な方法で可視化できます。これらの可視化は、異なるランクにおける項目の機能を理解するのに役立ちます:

  • ICBR(項目カテゴリ境界参照行列)は、各カテゴリ閾値における累積確率を示します。各項目について、これらの線はランクごとの各カテゴリ境界以上のスコアを得る確率を表しています。
  • ICRP(項目カテゴリ反応プロファイル行列)は、各反応カテゴリが選択される確率をランクごとに表示します。これらの線は、ランクの上昇に伴う反応パターンの変化を示しています。
plot(result.LRAord, type = "ICBR", items = 1:4, nc = 2, nr = 2)

plot(result.LRAord, type = "ICRP", items = 1:4, nc = 2, nr = 2)

二値データの出力と同様に、ランク所属確率プロットを通じて個々の受験者の特性を検討することができます。この可視化は、各受験者のランク所属確率の分布を示し、ランク分類の確実性を理解することができます。以下はデータセットの最初の15人の受験者についての結果です:

plot(result.LRAord, type = "RMP", students = 1:9, nc = 3, nr = 3)

注:レイアウトパラメータ nc = 3 と nr = 5 は、プロットを3列5行のグリッドに配置することを制御します。これにより、複数の項目や受験者を同時に比較しやすくなります。

LRA 名義尺度データへの適用

もしあなたが多肢選択式テストのような、正答を選択させる名義尺度水準のデータを持っているなら、LRAを使って分析することができます。

result.LRArated <- LRA(J35S5000, nrank = 10, mic = TRUE)
#> Starting EM estimation for Saturation Model...
#> iter 1 logLik -0.394564                                                         iter 2 logLik -0.394427                                                         iter 3 logLik -0.394516                                                         iter 4 logLik -0.394547                                                         
#> Starting EM estimation for Restricted Model...
#> iter 1 logLik -1.19393                                                          iter 2 logLik -1.19566                                                          iter 3 logLik -1.1957

順序尺度データと同様に、スコアとランクの関係を可視化することができます。

plot(result.LRArated, type = "ScoreFreq")

plot(result.LRArated, type = "ScoreRank")

また、潜在ランクと項目の関係や、被験者の所属確率を可視化することも可能です。

plot(result.LRArated, type = "ICRP", items = 1:4, nc = 2, nr = 2)

plot(result.LRAord, type = "RMP", students = 1:9, nc = 3, nr = 3)

バイクラスタリング

バイクラスタリングとランククラスタリングのアルゴリズムはほぼ同じで、フィルタリング行列を含むかどうかのみが異なります。この違いはBiclustering()関数のmethodオプションで指定します。詳細についてはヘルプドキュメントを参照してください。

Biclustering(J35S515, nfld = 5, ncls = 6, method = "B")
#> Biclustering is chosen.
#> iter 1 logLik -7966.66                                                          iter 2 logLik -7442.38                                                          iter 3 logLik -7266.35                                                          iter 4 logLik -7151.01                                                          iter 5 logLik -7023.94                                                          iter 6 logLik -6984.82                                                          iter 7 logLik -6950.27                                                          iter 8 logLik -6939.34                                                          iter 9 logLik -6930.89                                                          iter 10 logLik -6923.5                                                          iter 11 logLik -6914.56                                                         iter 12 logLik -6908.89                                                         iter 13 logLik -6906.84                                                         iter 14 logLik -6905.39                                                         iter 15 logLik -6904.24                                                         iter 16 logLik -6903.28                                                         iter 17 logLik -6902.41                                                         iter 18 logLik -6901.58                                                         iter 19 logLik -6900.74                                                         iter 20 logLik -6899.86                                                         iter 21 logLik -6898.9                                                          iter 22 logLik -6897.84                                                         iter 23 logLik -6896.66                                                         iter 24 logLik -6895.35                                                         iter 25 logLik -6893.92                                                         iter 26 logLik -6892.4                                                          iter 27 logLik -6890.85                                                         iter 28 logLik -6889.32                                                         iter 29 logLik -6887.9                                                          iter 30 logLik -6886.66                                                         iter 31 logLik -6885.67                                                         iter 32 logLik -6884.98                                                         iter 33 logLik -6884.58                                                         iter 33 logLik -6884.58
#> Bicluster Matrix Profile
#>        Class1 Class2 Class3 Class4 Class5 Class6
#> Field1 0.6236 0.8636 0.8718  0.898  0.952  1.000
#> Field2 0.0627 0.3332 0.4255  0.919  0.990  1.000
#> Field3 0.2008 0.5431 0.2281  0.475  0.706  1.000
#> Field4 0.0495 0.2455 0.0782  0.233  0.648  0.983
#> Field5 0.0225 0.0545 0.0284  0.043  0.160  0.983
#> 
#> Field Reference Profile Indices
#>        Alpha     A Beta     B Gamma       C
#> Field1     1 0.240    1 0.624   0.0  0.0000
#> Field2     3 0.493    3 0.426   0.0  0.0000
#> Field3     1 0.342    4 0.475   0.2 -0.3149
#> Field4     4 0.415    5 0.648   0.2 -0.1673
#> Field5     5 0.823    5 0.160   0.2 -0.0261
#> 
#>                               Class 1 Class 2 Class 3 Class 4 Class 5 Class 6
#> Test Reference Profile          4.431  11.894   8.598  16.002  23.326  34.713
#> Latent Class Ditribution      157.000  64.000  82.000 106.000  89.000  17.000
#> Class Membership Distribution 146.105  73.232  85.753 106.414  86.529  16.968
#> Latent Field Distribution
#>            Field 1 Field 2 Field 3 Field 4 Field 5
#> N of Items       3       8       7      10       7
#> 
#> Model Fit Indices
#> Number of Latent Class : 6
#> Number of Latent Field: 5
#> Number of EM cycle: 33 
#>                    value
#> model_log_like -6884.582
#> bench_log_like -5891.314
#> null_log_like  -9862.114
#> model_Chi_sq    1986.535
#> null_Chi_sq     7941.601
#> model_df        1160.000
#> null_df         1155.000
#> NFI                0.750
#> RFI                0.751
#> IFI                0.878
#> TLI                0.879
#> CFI                0.878
#> RMSEA              0.037
#> AIC             -333.465
#> CAIC           -5258.949
#> BIC            -5256.699
result.Ranklustering <- Biclustering(J35S515, nfld = 5, ncls = 6, method = "R")
#> Ranklustering is chosen.
#> iter 1 logLik -8097.56                                                          iter 2 logLik -7669.21                                                          iter 3 logLik -7586.72                                                          iter 4 logLik -7568.24                                                          iter 5 logLik -7561.02                                                          iter 6 logLik -7557.34                                                          iter 7 logLik -7557.36                                                          iter 7 logLik -7557.36
#> Strongly ordinal alignment condition was satisfied.
plot(result.Ranklustering, type = "Array")

plot(result.Ranklustering, type = "FRP", nc = 2, nr = 3)

plot(result.Ranklustering, type = "RMP", students = 1:9, nc = 3, nr = 3)

plot(result.Ranklustering, type = "LRD")

最適なクラス数とフィールド数を見つけるために、無限関係モデルが利用可能です。

result.IRM <- IRM(J35S515, gamma_c = 1, gamma_f = 1, verbose = TRUE)
#> iter 1 Exact match count of field elements. 0 nfld 15 ncls 30                   iter 2 Exact match count of field elements. 0 nfld 12 ncls 27                   iter 3 Exact match count of field elements. 1 nfld 12 ncls 24                   iter 4 Exact match count of field elements. 2 nfld 12 ncls 23                   iter 5 Exact match count of field elements. 3 nfld 12 ncls 23                   iter 6 Exact match count of field elements. 0 nfld 12 ncls 23                   iter 7 Exact match count of field elements. 1 nfld 12 ncls 23                   iter 8 Exact match count of field elements. 2 nfld 12 ncls 23                   iter 9 Exact match count of field elements. 3 nfld 12 ncls 21                   iter 10 Exact match count of field elements. 4 nfld 12 ncls 21                  iter 11 Exact match count of field elements. 5 nfld 12 ncls 21                  The minimum class member count is under the setting value.
#> bic -99592.5 nclass 21
#> The minimum class member count is under the setting value.
#> bic -99980.4 nclass 20
#> The minimum class member count is under the setting value.
#> bic -99959.7 nclass 19
#> The minimum class member count is under the setting value.
#> bic -99988.3 nclass 18
#> The minimum class member count is under the setting value.
#> bic -100001 nclass 17
plot(result.IRM, type = "Array")

plot(result.IRM, type = "FRP", nc = 3)

plot(result.IRM, type = "TRP")

また、チャイニーズレストランプロセスを用いた無限関係モデルの導出に関する補足的なノートはこちらにあります。

ベイジアンネットワークモデル

ベイジアンネットワークモデルは、項目の正答率に基づいて、項目間の条件付き確率をネットワーク形式で表現するモデルです。項目間の有向非循環グラフ(DAG)を外部から与えることで、指定されたグラフに基づいて条件付き確率を計算します。ネットワークの分析と表現にはigraphパッケージを使用しています。

グラフの指定方法は3つあります。行列形式のDAGを引数adj_matrixに渡す方法、CSVファイルに記述されたDAGを引数adj_fileに渡す方法、igraphパッケージで使用されるグラフ型オブジェクトgを引数gに渡す方法です。

行列形式のadj_matrixとグラフオブジェクトgを作成する方法は以下の通りです:

library(igraph)
DAG <-
  matrix(
    c(
      "Item01", "Item02",
      "Item02", "Item03",
      "Item02", "Item04",
      "Item03", "Item05",
      "Item04", "Item05"
    ),
    ncol = 2, byrow = T
  )
## graph object
g <- igraph::graph_from_data_frame(DAG)
g
#> IGRAPH 6d296fc DN-- 5 5 -- 
#> + attr: name (v/c)
#> + edges from 6d296fc (vertex names):
#> [1] Item01->Item02 Item02->Item03 Item02->Item04 Item03->Item05 Item04->Item05
## Adjacency matrix
adj_mat <- as.matrix(igraph::get.adjacency(g))
print(adj_mat)
#>        Item01 Item02 Item03 Item04 Item05
#> Item01      0      1      0      0      0
#> Item02      0      0      1      1      0
#> Item03      0      0      0      0      1
#> Item04      0      0      0      0      1
#> Item05      0      0      0      0      0

上記のグラフと同じ情報を持つCSVファイルは以下の形式です。最初の行には列名(ヘッダー)が含まれており、データとしては読み込まれません。

#> From,To
#> Item01,Item02
#> Item02,Item03
#> Item02,Item04
#> Item03,Item05
#> Item04,Item05

指定方法は1つで十分ですが、複数の指定がある場合は、ファイル、行列、グラフオブジェクトの順で優先されます。

グラフ構造(DAG)を提供してBNMを実行する例は以下の通りです:

result.BNM <- BNM(J5S10, adj_matrix = adj_mat)
result.BNM
#> Adjacency Matrix
#>        Item01 Item02 Item03 Item04 Item05
#> Item01      0      1      0      0      0
#> Item02      0      0      1      1      0
#> Item03      0      0      0      0      1
#> Item04      0      0      0      0      1
#> Item05      0      0      0      0      0
#> [1] "Your graph is an acyclic graph."
#> [1] "Your graph is connected DAG."

#> 
#> Parameter Learning
#>        PIRP 1 PIRP 2 PIRP 3 PIRP 4
#> Item01  0.600                     
#> Item02  0.250    0.5              
#> Item03  0.833    1.0              
#> Item04  0.167    0.5              
#> Item05  0.000    NaN  0.333  0.667
#> 
#> Conditional Correct Response Rate
#>    Child Item N of Parents   Parent Items       PIRP Conditional CRR
#> 1      Item01            0     No Parents No Pattern       0.6000000
#> 2      Item02            1         Item01          0       0.2500000
#> 3      Item02            1         Item01          1       0.5000000
#> 4      Item03            1         Item02          0       0.8333333
#> 5      Item03            1         Item02          1       1.0000000
#> 6      Item04            1         Item02          0       0.1666667
#> 7      Item04            1         Item02          1       0.5000000
#> 8      Item05            2 Item03, Item04         00       0.0000000
#> 9      Item05            2 Item03, Item04         01        NaN(0/0)
#> 10     Item05            2 Item03, Item04         10       0.3333333
#> 11     Item05            2 Item03, Item04         11       0.6666667
#> 
#> Model Fit Indices
#>                  value
#> model_log_like -27.046
#> bench_log_like  -8.935
#> null_log_like  -28.882
#> model_Chi_sq    36.222
#> null_Chi_sq     39.894
#> model_df        20.000
#> null_df         25.000
#> NFI              0.092
#> RFI              0.000
#> IFI              0.185
#> TLI              0.000
#> CFI              0.000
#> RMSEA            0.300
#> AIC             -3.778
#> CAIC           -11.736
#> BIC             -9.829

遺伝的アルゴリズムによるベイジアンネットワークの構造学習

この関数は、遺伝的アルゴリズムを用いてデータに適したDAGを探索します。最適なDAGが必ずしも特定されるわけではありません。ノードとエッジのすべての組み合わせを探索する代わりに、正答率によって位相的にソートされた空間、すなわち隣接行列の上三角部分のみを探索します。解釈可能性のために、親ノードの数は制限されるべきです。ヌルモデルは提案されません。項目の内容と質問者の経験を活用して結果を解釈することが推奨されます。詳細については、テキスト(荘島, 2022)の8.5節を参照してください。

GAは項目数と集団サイズによっては相当な時間がかかる可能性があることにご注意ください。

StrLearningGA_BNM(J5S10,
  population = 20, Rs = 0.5, Rm = 0.002, maxParents = 2,
  maxGeneration = 100, crossover = 2, elitism = 2
)
#> Adjacency Matrix
#>        Item01 Item02 Item03 Item04 Item05
#> Item01      0      0      0      1      0
#> Item02      0      0      0      0      0
#> Item03      0      0      0      0      0
#> Item04      0      0      0      0      0
#> Item05      0      0      0      0      0
#> [1] "Your graph is an acyclic graph."
#> [1] "Your graph is connected DAG."

#> 
#> Parameter Learning
#>        PIRP 1 PIRP 2
#> Item01    0.6       
#> Item02    0.4       
#> Item03    0.9       
#> Item04    0.0    0.5
#> Item05    0.4       
#> 
#> Conditional Correct Response Rate
#>   Child Item N of Parents Parent Items       PIRP Conditional CRR
#> 1     Item01            0   No Parents No Pattern       0.6000000
#> 2     Item02            0   No Parents No Pattern       0.4000000
#> 3     Item03            0   No Parents No Pattern       0.9000000
#> 4     Item04            1       Item01          0       0.0000000
#> 5     Item04            1       Item01          1       0.5000000
#> 6     Item05            0   No Parents No Pattern       0.4000000
#> 
#> Model Fit Indices
#>                  value
#> model_log_like -27.600
#> bench_log_like  -8.935
#> null_log_like  -28.882
#> model_Chi_sq    37.330
#> null_Chi_sq     39.894
#> model_df        24.000
#> null_df         25.000
#> NFI              0.064
#> RFI              0.025
#> IFI              0.161
#> TLI              0.068
#> CFI              0.105
#> RMSEA            0.248
#> AIC            -10.670
#> CAIC           -20.220
#> BIC            -17.932

Fukuda(2014)によって提案された集団ベース増分学習法も学習に使用できます。この手法には、最後に最適な隣接行列を推定するためのいくつかのバリエーションがあり、オプションとして指定できます。詳細についてはヘルプまたはテキストの8.5.2節を参照してください。

StrLearningPBIL_BNM(J5S10,
  population = 20, Rs = 0.5, Rm = 0.005, maxParents = 2,
  alpha = 0.05, estimate = 4
)
#> Adjacency Matrix
#>        Item01 Item02 Item03 Item04 Item05
#> Item01      0      0      0      1      0
#> Item02      0      0      0      0      0
#> Item03      1      0      0      0      0
#> Item04      0      0      0      0      0
#> Item05      0      0      0      0      0
#> [1] "Your graph is an acyclic graph."
#> [1] "Your graph is connected DAG."

#> 
#> Parameter Learning
#>        PIRP 1 PIRP 2
#> Item01    0.0  0.667
#> Item02    0.4       
#> Item03    0.9       
#> Item04    0.0  0.500
#> Item05    0.4       
#> 
#> Conditional Correct Response Rate
#>   Child Item N of Parents Parent Items       PIRP Conditional CRR
#> 1     Item01            1       Item03          0       0.0000000
#> 2     Item01            1       Item03          1       0.6666667
#> 3     Item02            0   No Parents No Pattern       0.4000000
#> 4     Item03            0   No Parents No Pattern       0.9000000
#> 5     Item04            1       Item01          0       0.0000000
#> 6     Item04            1       Item01          1       0.5000000
#> 7     Item05            0   No Parents No Pattern       0.4000000
#> 
#> Model Fit Indices
#>                  value
#> model_log_like -26.599
#> bench_log_like  -8.935
#> null_log_like  -28.882
#> model_Chi_sq    35.327
#> null_Chi_sq     39.894
#> model_df        23.000
#> null_df         25.000
#> NFI              0.114
#> RFI              0.037
#> IFI              0.270
#> TLI              0.100
#> CFI              0.172
#> RMSEA            0.244
#> AIC            -10.673
#> CAIC           -19.825
#> BIC            -17.633

局所依存潜在ランク分析

LD-LRAはLRAとBNMを組み合わせた分析で、潜在ランク内の項目間のネットワーク構造を分析するために使用されます。この関数では構造学習は行われないため、各ランクの項目グラフを別々のファイルとして提供する必要があります。

各クラスについてグラフを指定する必要があり、その方法は3つあります。各クラスの行列型DAGまたはigraphパッケージで使用されるグラフ型オブジェクトのリストを、それぞれ引数adj_listまたはg_listに渡す方法、またはCSVファイルでDAGを記述する方法です。CSVファイルでの指定方法は以下の通りです。

DAG_dat <- matrix(c(
  "From", "To", "Rank",
  "Item01", "Item02", 1,
  "Item04", "Item05", 1,
  "Item01", "Item02", 2,
  "Item02", "Item03", 2,
  "Item04", "Item05", 2,
  "Item08", "Item09", 2,
  "Item08", "Item10", 2,
  "Item09", "Item10", 2,
  "Item08", "Item11", 2,
  "Item01", "Item02", 3,
  "Item02", "Item03", 3,
  "Item04", "Item05", 3,
  "Item08", "Item09", 3,
  "Item08", "Item10", 3,
  "Item09", "Item10", 3,
  "Item08", "Item11", 3,
  "Item02", "Item03", 4,
  "Item04", "Item06", 4,
  "Item04", "Item07", 4,
  "Item05", "Item06", 4,
  "Item05", "Item07", 4,
  "Item08", "Item10", 4,
  "Item08", "Item11", 4,
  "Item09", "Item11", 4,
  "Item02", "Item03", 5,
  "Item04", "Item06", 5,
  "Item04", "Item07", 5,
  "Item05", "Item06", 5,
  "Item05", "Item07", 5,
  "Item09", "Item11", 5,
  "Item10", "Item11", 5,
  "Item10", "Item12", 5
), ncol = 3, byrow = TRUE)

# save csv file
edgeFile <- tempfile(fileext = ".csv")
write.csv(DAG_dat, edgeFile, row.names = FALSE, quote = TRUE)

ここでは、前述のCSVファイルを使用した行列型とグラフオブジェクトでの指定例を示します。指定方法は1つで十分ですが、複数の指定がある場合は、ファイル、行列、グラフオブジェクトの順で優先されます。

g_csv <- read.csv(edgeFile)
colnames(g_csv) <- c("From", "To", "Rank")
adj_list <- list()
g_list <- list()
for (i in 1:5) {
  adj_R <- g_csv[g_csv$Rank == i, 1:2]
  g_tmp <- igraph::graph_from_data_frame(adj_R)
  adj_tmp <- igraph::get.adjacency(g_tmp)
  g_list[[i]] <- g_tmp
  adj_list[[i]] <- adj_tmp
}
## Example of graph list
g_list
#> [[1]]
#> IGRAPH 1bbaff6 DN-- 4 2 -- 
#> + attr: name (v/c)
#> + edges from 1bbaff6 (vertex names):
#> [1] Item01->Item02 Item04->Item05
#> 
#> [[2]]
#> IGRAPH dd91d0b DN-- 9 7 -- 
#> + attr: name (v/c)
#> + edges from dd91d0b (vertex names):
#> [1] Item01->Item02 Item02->Item03 Item04->Item05 Item08->Item09 Item08->Item10 Item09->Item10
#> [7] Item08->Item11
#> 
#> [[3]]
#> IGRAPH 47ab93c DN-- 9 7 -- 
#> + attr: name (v/c)
#> + edges from 47ab93c (vertex names):
#> [1] Item01->Item02 Item02->Item03 Item04->Item05 Item08->Item09 Item08->Item10 Item09->Item10
#> [7] Item08->Item11
#> 
#> [[4]]
#> IGRAPH 3fdfd13 DN-- 10 8 -- 
#> + attr: name (v/c)
#> + edges from 3fdfd13 (vertex names):
#> [1] Item02->Item03 Item04->Item06 Item04->Item07 Item05->Item06 Item05->Item07 Item08->Item10
#> [7] Item08->Item11 Item09->Item11
#> 
#> [[5]]
#> IGRAPH 2a212e8 DN-- 10 8 -- 
#> + attr: name (v/c)
#> + edges from 2a212e8 (vertex names):
#> [1] Item02->Item03 Item04->Item06 Item04->Item07 Item05->Item06 Item05->Item07 Item09->Item11
#> [7] Item10->Item11 Item10->Item12
### Example of adjacency list
adj_list
#> [[1]]
#> 4 x 4 sparse Matrix of class "dgCMatrix"
#>        Item01 Item04 Item02 Item05
#> Item01      .      .      1      .
#> Item04      .      .      .      1
#> Item02      .      .      .      .
#> Item05      .      .      .      .
#> 
#> [[2]]
#> 9 x 9 sparse Matrix of class "dgCMatrix"
#>        Item01 Item02 Item04 Item08 Item09 Item03 Item05 Item10 Item11
#> Item01      .      1      .      .      .      .      .      .      .
#> Item02      .      .      .      .      .      1      .      .      .
#> Item04      .      .      .      .      .      .      1      .      .
#> Item08      .      .      .      .      1      .      .      1      1
#> Item09      .      .      .      .      .      .      .      1      .
#> Item03      .      .      .      .      .      .      .      .      .
#> Item05      .      .      .      .      .      .      .      .      .
#> Item10      .      .      .      .      .      .      .      .      .
#> Item11      .      .      .      .      .      .      .      .      .
#> 
#> [[3]]
#> 9 x 9 sparse Matrix of class "dgCMatrix"
#>        Item01 Item02 Item04 Item08 Item09 Item03 Item05 Item10 Item11
#> Item01      .      1      .      .      .      .      .      .      .
#> Item02      .      .      .      .      .      1      .      .      .
#> Item04      .      .      .      .      .      .      1      .      .
#> Item08      .      .      .      .      1      .      .      1      1
#> Item09      .      .      .      .      .      .      .      1      .
#> Item03      .      .      .      .      .      .      .      .      .
#> Item05      .      .      .      .      .      .      .      .      .
#> Item10      .      .      .      .      .      .      .      .      .
#> Item11      .      .      .      .      .      .      .      .      .
#> 
#> [[4]]
#> 10 x 10 sparse Matrix of class "dgCMatrix"
#>                           
#> Item02 . . . . . 1 . . . .
#> Item04 . . . . . . 1 1 . .
#> Item05 . . . . . . 1 1 . .
#> Item08 . . . . . . . . 1 1
#> Item09 . . . . . . . . . 1
#> Item03 . . . . . . . . . .
#> Item06 . . . . . . . . . .
#> Item07 . . . . . . . . . .
#> Item10 . . . . . . . . . .
#> Item11 . . . . . . . . . .
#> 
#> [[5]]
#> 10 x 10 sparse Matrix of class "dgCMatrix"
#>                           
#> Item02 . . . . . 1 . . . .
#> Item04 . . . . . . 1 1 . .
#> Item05 . . . . . . 1 1 . .
#> Item09 . . . . . . . . 1 .
#> Item10 . . . . . . . . 1 1
#> Item03 . . . . . . . . . .
#> Item06 . . . . . . . . . .
#> Item07 . . . . . . . . . .
#> Item11 . . . . . . . . . .
#> Item12 . . . . . . . . . .

このCSVファイルを使用してLDLRA関数を実行する例は以下の通りです。

result.LDLRA <- LDLRA(J12S5000,
  ncls = 5,
  adj_file = edgeFile
)
result.LDLRA
#> Adjacency Matrix
#> [[1]]
#>        Item01 Item02 Item03 Item04 Item05 Item06 Item07 Item08 Item09 Item10 Item11 Item12
#> Item01      0      1      0      0      0      0      0      0      0      0      0      0
#> Item02      0      0      0      0      0      0      0      0      0      0      0      0
#> Item03      0      0      0      0      0      0      0      0      0      0      0      0
#> Item04      0      0      0      0      1      0      0      0      0      0      0      0
#> Item05      0      0      0      0      0      0      0      0      0      0      0      0
#> Item06      0      0      0      0      0      0      0      0      0      0      0      0
#> Item07      0      0      0      0      0      0      0      0      0      0      0      0
#> Item08      0      0      0      0      0      0      0      0      0      0      0      0
#> Item09      0      0      0      0      0      0      0      0      0      0      0      0
#> Item10      0      0      0      0      0      0      0      0      0      0      0      0
#> Item11      0      0      0      0      0      0      0      0      0      0      0      0
#> Item12      0      0      0      0      0      0      0      0      0      0      0      0
#> 
#> [[2]]
#>        Item01 Item02 Item03 Item04 Item05 Item06 Item07 Item08 Item09 Item10 Item11 Item12
#> Item01      0      1      0      0      0      0      0      0      0      0      0      0
#> Item02      0      0      1      0      0      0      0      0      0      0      0      0
#> Item03      0      0      0      0      0      0      0      0      0      0      0      0
#> Item04      0      0      0      0      1      0      0      0      0      0      0      0
#> Item05      0      0      0      0      0      0      0      0      0      0      0      0
#> Item06      0      0      0      0      0      0      0      0      0      0      0      0
#> Item07      0      0      0      0      0      0      0      0      0      0      0      0
#> Item08      0      0      0      0      0      0      0      0      1      1      1      0
#> Item09      0      0      0      0      0      0      0      0      0      1      0      0
#> Item10      0      0      0      0      0      0      0      0      0      0      0      0
#> Item11      0      0      0      0      0      0      0      0      0      0      0      0
#> Item12      0      0      0      0      0      0      0      0      0      0      0      0
#> 
#> [[3]]
#>        Item01 Item02 Item03 Item04 Item05 Item06 Item07 Item08 Item09 Item10 Item11 Item12
#> Item01      0      1      0      0      0      0      0      0      0      0      0      0
#> Item02      0      0      1      0      0      0      0      0      0      0      0      0
#> Item03      0      0      0      0      0      0      0      0      0      0      0      0
#> Item04      0      0      0      0      1      0      0      0      0      0      0      0
#> Item05      0      0      0      0      0      0      0      0      0      0      0      0
#> Item06      0      0      0      0      0      0      0      0      0      0      0      0
#> Item07      0      0      0      0      0      0      0      0      0      0      0      0
#> Item08      0      0      0      0      0      0      0      0      1      1      1      0
#> Item09      0      0      0      0      0      0      0      0      0      1      0      0
#> Item10      0      0      0      0      0      0      0      0      0      0      0      0
#> Item11      0      0      0      0      0      0      0      0      0      0      0      0
#> Item12      0      0      0      0      0      0      0      0      0      0      0      0
#> 
#> [[4]]
#>        Item01 Item02 Item03 Item04 Item05 Item06 Item07 Item08 Item09 Item10 Item11 Item12
#> Item01      0      0      0      0      0      0      0      0      0      0      0      0
#> Item02      0      0      1      0      0      0      0      0      0      0      0      0
#> Item03      0      0      0      0      0      0      0      0      0      0      0      0
#> Item04      0      0      0      0      0      1      1      0      0      0      0      0
#> Item05      0      0      0      0      0      1      1      0      0      0      0      0
#> Item06      0      0      0      0      0      0      0      0      0      0      0      0
#> Item07      0      0      0      0      0      0      0      0      0      0      0      0
#> Item08      0      0      0      0      0      0      0      0      0      1      1      0
#> Item09      0      0      0      0      0      0      0      0      0      0      1      0
#> Item10      0      0      0      0      0      0      0      0      0      0      0      0
#> Item11      0      0      0      0      0      0      0      0      0      0      0      0
#> Item12      0      0      0      0      0      0      0      0      0      0      0      0
#> 
#> [[5]]
#>        Item01 Item02 Item03 Item04 Item05 Item06 Item07 Item08 Item09 Item10 Item11 Item12
#> Item01      0      0      0      0      0      0      0      0      0      0      0      0
#> Item02      0      0      1      0      0      0      0      0      0      0      0      0
#> Item03      0      0      0      0      0      0      0      0      0      0      0      0
#> Item04      0      0      0      0      0      1      1      0      0      0      0      0
#> Item05      0      0      0      0      0      1      1      0      0      0      0      0
#> Item06      0      0      0      0      0      0      0      0      0      0      0      0
#> Item07      0      0      0      0      0      0      0      0      0      0      0      0
#> Item08      0      0      0      0      0      0      0      0      0      0      0      0
#> Item09      0      0      0      0      0      0      0      0      0      0      1      0
#> Item10      0      0      0      0      0      0      0      0      0      0      1      1
#> Item11      0      0      0      0      0      0      0      0      0      0      0      0
#> Item12      0      0      0      0      0      0      0      0      0      0      0      0

#> 
#> Parameter Learning
#>      Item Rank PIRP 1 PIRP 2 PIRP 3 PIRP 4
#> 1  Item01    1  0.456                     
#> 2  Item02    1  0.030  0.444              
#> 3  Item03    1  0.083                     
#> 4  Item04    1  0.421                     
#> 5  Item05    1  0.101  0.240              
#> 6  Item06    1  0.025                     
#> 7  Item07    1  0.016                     
#> 8  Item08    1  0.286                     
#> 9  Item09    1  0.326                     
#> 10 Item10    1  0.181                     
#> 11 Item11    1  0.106                     
#> 12 Item12    1  0.055                     
#> 13 Item01    2  0.549                     
#> 14 Item02    2  0.035  0.568              
#> 15 Item03    2  0.020  0.459              
#> 16 Item04    2  0.495                     
#> 17 Item05    2  0.148  0.351              
#> 18 Item06    2  0.066                     
#> 19 Item07    2  0.045                     
#> 20 Item08    2  0.407                     
#> 21 Item09    2  0.264  0.734              
#> 22 Item10    2  0.081  0.133  0.159  0.745
#> 23 Item11    2  0.041  0.445              
#> 24 Item12    2  0.086                     
#> 25 Item01    3  0.683                     
#> 26 Item02    3  0.040  0.728              
#> 27 Item03    3  0.032  0.617              
#> 28 Item04    3  0.612                     
#> 29 Item05    3  0.227  0.556              
#> 30 Item06    3  0.205                     
#> 31 Item07    3  0.156                     
#> 32 Item08    3  0.581                     
#> 33 Item09    3  0.330  0.845              
#> 34 Item10    3  0.092  0.160  0.211  0.843
#> 35 Item11    3  0.056  0.636              
#> 36 Item12    3  0.152                     
#> 37 Item01    4  0.836                     
#> 38 Item02    4  0.720                     
#> 39 Item03    4  0.058  0.713              
#> 40 Item04    4  0.740                     
#> 41 Item05    4  0.635                     
#> 42 Item06    4  0.008  0.105  0.023  0.684
#> 43 Item07    4  0.010  0.031  0.039  0.542
#> 44 Item08    4  0.760                     
#> 45 Item09    4  0.805                     
#> 46 Item10    4  0.150  0.844              
#> 47 Item11    4  0.064  0.124  0.105  0.825
#> 48 Item12    4  0.227                     
#> 49 Item01    5  0.931                     
#> 50 Item02    5  0.869                     
#> 51 Item03    5  0.099  0.789              
#> 52 Item04    5  0.846                     
#> 53 Item05    5  0.811                     
#> 54 Item06    5  0.015  0.125  0.040  0.788
#> 55 Item07    5  0.016  0.034  0.064  0.650
#> 56 Item08    5  0.880                     
#> 57 Item09    5  0.912                     
#> 58 Item10    5  0.825                     
#> 59 Item11    5  0.082  0.190  0.216  0.915
#> 60 Item12    5  0.153  0.341              
#> 
#> Conditional Correct Response Rate
#>     Child Item Rank N of Parents   Parent Items       PIRP Conditional CRR
#> 1       Item01    1            0     No Parents No Pattern         0.45558
#> 2       Item02    1            1         Item01          0         0.03025
#> 3       Item02    1            1         Item01          1         0.44394
#> 4       Item03    1            0     No Parents No Pattern         0.08278
#> 5       Item04    1            0     No Parents No Pattern         0.42148
#> 6       Item05    1            1         Item04          0         0.10127
#> 7       Item05    1            1         Item04          1         0.24025
#> 8       Item06    1            0     No Parents No Pattern         0.02499
#> 9       Item07    1            0     No Parents No Pattern         0.01574
#> 10      Item08    1            0     No Parents No Pattern         0.28642
#> 11      Item09    1            0     No Parents No Pattern         0.32630
#> 12      Item10    1            0     No Parents No Pattern         0.18092
#> 13      Item11    1            0     No Parents No Pattern         0.10575
#> 14      Item12    1            0     No Parents No Pattern         0.05523
#> 15      Item01    2            0     No Parents No Pattern         0.54940
#> 16      Item02    2            1         Item01          0         0.03471
#> 17      Item02    2            1         Item01          1         0.56821
#> 18      Item03    2            1         Item02          0         0.02016
#> 19      Item03    2            1         Item02          1         0.45853
#> 20      Item04    2            0     No Parents No Pattern         0.49508
#> 21      Item05    2            1         Item04          0         0.14771
#> 22      Item05    2            1         Item04          1         0.35073
#> 23      Item06    2            0     No Parents No Pattern         0.06647
#> 24      Item07    2            0     No Parents No Pattern         0.04491
#> 25      Item08    2            0     No Parents No Pattern         0.40721
#> 26      Item09    2            1         Item08          0         0.26431
#> 27      Item09    2            1         Item08          1         0.73427
#> 28      Item10    2            2 Item08, Item09         00         0.08098
#> 29      Item10    2            2 Item08, Item09         01         0.13279
#> 30      Item10    2            2 Item08, Item09         10         0.15937
#> 31      Item10    2            2 Item08, Item09         11         0.74499
#> 32      Item11    2            1         Item08          0         0.04094
#> 33      Item11    2            1         Item08          1         0.44457
#> 34      Item12    2            0     No Parents No Pattern         0.08574
#> 35      Item01    3            0     No Parents No Pattern         0.68342
#> 36      Item02    3            1         Item01          0         0.04020
#> 37      Item02    3            1         Item01          1         0.72757
#> 38      Item03    3            1         Item02          0         0.03175
#> 39      Item03    3            1         Item02          1         0.61691
#> 40      Item04    3            0     No Parents No Pattern         0.61195
#> 41      Item05    3            1         Item04          0         0.22705
#> 42      Item05    3            1         Item04          1         0.55588
#> 43      Item06    3            0     No Parents No Pattern         0.20488
#> 44      Item07    3            0     No Parents No Pattern         0.15633
#> 45      Item08    3            0     No Parents No Pattern         0.58065
#> 46      Item09    3            1         Item08          0         0.32967
#> 47      Item09    3            1         Item08          1         0.84549
#> 48      Item10    3            2 Item08, Item09         00         0.09192
#> 49      Item10    3            2 Item08, Item09         01         0.15977
#> 50      Item10    3            2 Item08, Item09         10         0.21087
#> 51      Item10    3            2 Item08, Item09         11         0.84330
#> 52      Item11    3            1         Item08          0         0.05581
#> 53      Item11    3            1         Item08          1         0.63598
#> 54      Item12    3            0     No Parents No Pattern         0.15169
#> 55      Item01    4            0     No Parents No Pattern         0.83557
#> 56      Item02    4            0     No Parents No Pattern         0.71950
#> 57      Item03    4            1         Item02          0         0.05808
#> 58      Item03    4            1         Item02          1         0.71297
#> 59      Item04    4            0     No Parents No Pattern         0.73957
#> 60      Item05    4            0     No Parents No Pattern         0.63526
#> 61      Item06    4            2 Item04, Item05         00         0.00816
#> 62      Item06    4            2 Item04, Item05         01         0.10474
#> 63      Item06    4            2 Item04, Item05         10         0.02265
#> 64      Item06    4            2 Item04, Item05         11         0.68419
#> 65      Item07    4            2 Item04, Item05         00         0.00984
#> 66      Item07    4            2 Item04, Item05         01         0.03091
#> 67      Item07    4            2 Item04, Item05         10         0.03850
#> 68      Item07    4            2 Item04, Item05         11         0.54195
#> 69      Item08    4            0     No Parents No Pattern         0.75976
#> 70      Item09    4            0     No Parents No Pattern         0.80490
#> 71      Item10    4            1         Item08          0         0.14956
#> 72      Item10    4            1         Item08          1         0.84430
#> 73      Item11    4            2 Item08, Item09         00         0.06376
#> 74      Item11    4            2 Item08, Item09         01         0.12384
#> 75      Item11    4            2 Item08, Item09         10         0.10494
#> 76      Item11    4            2 Item08, Item09         11         0.82451
#> 77      Item12    4            0     No Parents No Pattern         0.22688
#> 78      Item01    5            0     No Parents No Pattern         0.93131
#> 79      Item02    5            0     No Parents No Pattern         0.86923
#> 80      Item03    5            1         Item02          0         0.09865
#> 81      Item03    5            1         Item02          1         0.78854
#> 82      Item04    5            0     No Parents No Pattern         0.84621
#> 83      Item05    5            0     No Parents No Pattern         0.81118
#> 84      Item06    5            2 Item04, Item05         00         0.01452
#> 85      Item06    5            2 Item04, Item05         01         0.12528
#> 86      Item06    5            2 Item04, Item05         10         0.04000
#> 87      Item06    5            2 Item04, Item05         11         0.78805
#> 88      Item07    5            2 Item04, Item05         00         0.01570
#> 89      Item07    5            2 Item04, Item05         01         0.03361
#> 90      Item07    5            2 Item04, Item05         10         0.06363
#> 91      Item07    5            2 Item04, Item05         11         0.65039
#> 92      Item08    5            0     No Parents No Pattern         0.88028
#> 93      Item09    5            0     No Parents No Pattern         0.91209
#> 94      Item10    5            0     No Parents No Pattern         0.82476
#> 95      Item11    5            2 Item09, Item10         00         0.08248
#> 96      Item11    5            2 Item09, Item10         01         0.18951
#> 97      Item11    5            2 Item09, Item10         10         0.21590
#> 98      Item11    5            2 Item09, Item10         11         0.91466
#> 99      Item12    5            1         Item10          0         0.15301
#> 100     Item12    5            1         Item10          1         0.34114
#> 
#> Marginal Item Reference Profile
#>        Rank 1 Rank 2 Rank 3 Rank 4 Rank 5
#> Item01 0.4556 0.5494  0.683  0.836  0.931
#> Item02 0.2099 0.2964  0.474  0.720  0.869
#> Item03 0.0828 0.1397  0.316  0.554  0.741
#> Item04 0.4215 0.4951  0.612  0.740  0.846
#> Item05 0.1555 0.2393  0.432  0.635  0.811
#> Item06 0.0250 0.0665  0.205  0.385  0.631
#> Item07 0.0157 0.0449  0.156  0.304  0.517
#> Item08 0.2864 0.4072  0.581  0.760  0.880
#> Item09 0.3263 0.4409  0.624  0.805  0.912
#> Item10 0.1809 0.2977  0.498  0.650  0.825
#> Item11 0.1057 0.1926  0.387  0.565  0.808
#> Item12 0.0552 0.0857  0.152  0.227  0.317
#> 
#> IRP Indices
#>        Alpha          A Beta         B Gamma C
#> Item01     3 0.15215133    1 0.4555806     0 0
#> Item02     3 0.24578705    3 0.4737140     0 0
#> Item03     3 0.23808314    4 0.5544465     0 0
#> Item04     3 0.12762155    2 0.4950757     0 0
#> Item05     3 0.20322441    3 0.4320364     0 0
#> Item06     4 0.24595102    4 0.3851075     0 0
#> Item07     4 0.21361675    5 0.5173874     0 0
#> Item08     3 0.17910918    3 0.5806476     0 0
#> Item09     2 0.18320368    2 0.4408936     0 0
#> Item10     2 0.20070396    3 0.4984108     0 0
#> Item11     4 0.24332189    4 0.5650492     0 0
#> Item12     4 0.09047482    5 0.3173548     0 0
#> [1] "Strongly ordinal alignment condition was satisfied."
#> 
#> Test reference Profile and Latent Rank Distribution
#>                                Rank 1   Rank 2  Rank 3  Rank 4   Rank 5
#> Test Reference Profile          2.321    3.255   5.121   7.179    9.090
#> Latent Rank Ditribution      1829.000  593.000 759.000 569.000 1250.000
#> Rank Membership Distribution 1121.838 1087.855 873.796 835.528 1080.983
#> [1] "Weakly ordinal alignment condition was satisfied."
#> 
#> Model Fit Indices
#>                     value
#> model_log_like -26657.783
#> bench_log_like -21318.465
#> null_log_like  -37736.228
#> model_Chi_sq    10678.636
#> null_Chi_sq     32835.527
#> model_df           56.000
#> null_df           144.000
#> NFI                 0.675
#> RFI                 0.164
#> IFI                 0.676
#> TLI                 0.164
#> CFI                 0.675
#> RMSEA               0.195
#> AIC             10566.636
#> CAIC            10201.662
#> BIC             10201.673

もちろん、様々な種類のプロットもサポートしています。

plot(result.LDLRA, type = "IRP", nc = 4, nr = 3)

plot(result.LDLRA, type = "TRP")

plot(result.LDLRA, type = "LRD")

GA(PBIL)を用いたLDLRAの構造学習

PBILアルゴリズムを使用して、各ランクの項目間相互作用グラフを学習することができます。様々なオプションに加えて、学習プロセスには非常に長い計算時間が必要です。また、結果は実行可能な解の1つに過ぎず、必ずしも最適解ではないことに注意することが重要です。

result.LDLRA.PBIL <- StrLearningPBIL_LDLRA(J35S515,
  seed = 123,
  ncls = 5,
  method = "R",
  elitism = 1,
  successiveLimit = 15
)
result.LDLRA.PBIL

局所依存バイクラスタリング

局所依存バイクラスタリングは、バイクラスタリングとベイジアンネットワークモデルを組み合わせたものです。このモデルには3つの主要な要素が必要です: - 潜在クラス/ランクの数 - 項目のフィールド割り当て - 各ランクにおけるフィールド間のネットワーク構造

実装例を以下に示します:

# Create field configuration vector (assign items to fields)
conf <- c(1, 6, 6, 8, 9, 9, 4, 7, 7, 7, 5, 8, 9, 10, 10, 9, 9, 10, 10, 10, 2, 2, 3, 3, 5, 5, 6, 9, 9, 10, 1, 1, 7, 9, 10)

# Create edge data for network structure between fields
edges_data <- data.frame(
  "From Field (Parent) >>>" = c(
    6, 4, 5, 1, 1, 4, # Class/Rank 2
    3, 4, 6, 2, 4, 4, # Class/Rank 3
    3, 6, 4, 1, # Class/Rank 4
    7, 9, 6, 7 # Class/Rank 5
  ),
  ">>> To Field (Child)" = c(
    8, 7, 8, 7, 2, 5, # Class/Rank 2
    5, 8, 8, 4, 6, 7, # Class/Rank 3
    5, 8, 5, 8, # Class/Rank 4
    10, 10, 8, 9 # Class/Rank 5
  ),
  "At Class/Rank (Locus)" = c(
    2, 2, 2, 2, 2, 2, # Class/Rank 2
    3, 3, 3, 3, 3, 3, # Class/Rank 3
    4, 4, 4, 4, # Class/Rank 4
    5, 5, 5, 5 # Class/Rank 5
  )
)

# Save edge data to temporary file
edgeFile <- tempfile(fileext = ".csv")
write.csv(edges_data, file = edgeFile, row.names = FALSE)

また、テキスト(Shojima,2022)で言及されているように、ネットワーク構造を探索的に求めることは適切な結果を得られないことが多いため、実装されていません。

result.LDB <- LDB(U = J35S515, ncls = 5, conf = conf, adj_file = edgeFile)
result.LDB
#> Adjacency Matrix
#> [[1]]
#>         Field01 Field02 Field03 Field04 Field05 Field06 Field07 Field08 Field09 Field10
#> Field01       0       0       0       0       0       0       0       0       0       0
#> Field02       0       0       0       0       0       0       0       0       0       0
#> Field03       0       0       0       0       0       0       0       0       0       0
#> Field04       0       0       0       0       0       0       0       0       0       0
#> Field05       0       0       0       0       0       0       0       0       0       0
#> Field06       0       0       0       0       0       0       0       0       0       0
#> Field07       0       0       0       0       0       0       0       0       0       0
#> Field08       0       0       0       0       0       0       0       0       0       0
#> Field09       0       0       0       0       0       0       0       0       0       0
#> Field10       0       0       0       0       0       0       0       0       0       0
#> 
#> [[2]]
#>         Field01 Field02 Field03 Field04 Field05 Field06 Field07 Field08 Field09 Field10
#> Field01       0       1       0       0       0       0       1       0       0       0
#> Field02       0       0       0       0       0       0       0       0       0       0
#> Field03       0       0       0       0       0       0       0       0       0       0
#> Field04       0       0       0       0       1       0       1       0       0       0
#> Field05       0       0       0       0       0       0       0       1       0       0
#> Field06       0       0       0       0       0       0       0       1       0       0
#> Field07       0       0       0       0       0       0       0       0       0       0
#> Field08       0       0       0       0       0       0       0       0       0       0
#> Field09       0       0       0       0       0       0       0       0       0       0
#> Field10       0       0       0       0       0       0       0       0       0       0
#> 
#> [[3]]
#>         Field01 Field02 Field03 Field04 Field05 Field06 Field07 Field08 Field09 Field10
#> Field01       0       0       0       0       0       0       0       0       0       0
#> Field02       0       0       0       1       0       0       0       0       0       0
#> Field03       0       0       0       0       1       0       0       0       0       0
#> Field04       0       0       0       0       0       1       1       1       0       0
#> Field05       0       0       0       0       0       0       0       0       0       0
#> Field06       0       0       0       0       0       0       0       1       0       0
#> Field07       0       0       0       0       0       0       0       0       0       0
#> Field08       0       0       0       0       0       0       0       0       0       0
#> Field09       0       0       0       0       0       0       0       0       0       0
#> Field10       0       0       0       0       0       0       0       0       0       0
#> 
#> [[4]]
#>         Field01 Field02 Field03 Field04 Field05 Field06 Field07 Field08 Field09 Field10
#> Field01       0       0       0       0       0       0       0       1       0       0
#> Field02       0       0       0       0       0       0       0       0       0       0
#> Field03       0       0       0       0       1       0       0       0       0       0
#> Field04       0       0       0       0       1       0       0       0       0       0
#> Field05       0       0       0       0       0       0       0       0       0       0
#> Field06       0       0       0       0       0       0       0       1       0       0
#> Field07       0       0       0       0       0       0       0       0       0       0
#> Field08       0       0       0       0       0       0       0       0       0       0
#> Field09       0       0       0       0       0       0       0       0       0       0
#> Field10       0       0       0       0       0       0       0       0       0       0
#> 
#> [[5]]
#>         Field01 Field02 Field03 Field04 Field05 Field06 Field07 Field08 Field09 Field10
#> Field01       0       0       0       0       0       0       0       0       0       0
#> Field02       0       0       0       0       0       0       0       0       0       0
#> Field03       0       0       0       0       0       0       0       0       0       0
#> Field04       0       0       0       0       0       0       0       0       0       0
#> Field05       0       0       0       0       0       0       0       0       0       0
#> Field06       0       0       0       0       0       0       0       1       0       0
#> Field07       0       0       0       0       0       0       0       0       1       1
#> Field08       0       0       0       0       0       0       0       0       0       0
#> Field09       0       0       0       0       0       0       0       0       0       1
#> Field10       0       0       0       0       0       0       0       0       0       0

#> 
#> Parameter Learning
#> Rank 1 
#>         PIRP 0 PIRP 1 PIRP 2 PIRP 3 PIRP 4 PIRP 5 PIRP 6 PIRP 7 PIRP 8 PIRP 9 PIRP 10 PIRP 11 PIRP 12
#> Field01 0.6538                                                                                       
#> Field02 0.0756                                                                                       
#> Field03 0.1835                                                                                       
#> Field04 0.3819                                                                                       
#> Field05 0.0500                                                                                       
#> Field06 0.0985                                                                                       
#> Field07 0.2176                                                                                       
#> Field08 0.0608                                                                                       
#> Field09 0.0563                                                                                       
#> Field10 0.0237                                                                                       
#> Rank 2 
#>         PIRP 0 PIRP 1 PIRP 2 PIRP 3 PIRP 4 PIRP 5 PIRP 6 PIRP 7 PIRP 8 PIRP 9 PIRP 10 PIRP 11 PIRP 12
#> Field01 0.8216                                                                                       
#> Field02 0.1463 0.3181  0.383  0.597                                                                  
#> Field03 0.3320                                                                                       
#> Field04 0.4931                                                                                       
#> Field05 0.1596 0.2552                                                                                
#> Field06 0.2541                                                                                       
#> Field07 0.1232 0.2926  0.217  0.306  0.376                                                           
#> Field08 0.0648 0.0887  0.236  0.443  0.196  0.285  0.624                                             
#> Field09 0.1101                                                                                       
#> Field10 0.0359                                                                                       
#> Rank 3 
#>         PIRP 0 PIRP 1 PIRP 2 PIRP 3 PIRP 4 PIRP 5 PIRP 6 PIRP 7 PIRP 8 PIRP 9 PIRP 10 PIRP 11 PIRP 12
#> Field01 0.8923                                                                                       
#> Field02 0.8736                                                                                       
#> Field03 0.8030                                                                                       
#> Field04 0.4730  0.492  0.650                                                                         
#> Field05 0.2732  0.319  0.714                                                                         
#> Field06 0.4025  0.486                                                                                
#> Field07 0.3162  0.408                                                                                
#> Field08 0.1028  0.166  0.177  0.439   0.59                                                           
#> Field09 0.1799                                                                                       
#> Field10 0.0431                                                                                       
#> Rank 4 
#>          PIRP 0   PIRP 1 PIRP 2 PIRP 3 PIRP 4 PIRP 5 PIRP 6 PIRP 7 PIRP 8 PIRP 9 PIRP 10 PIRP 11
#> Field01 0.91975                                                                                 
#> Field02 0.97126                                                                                 
#> Field03 0.96955                                                                                 
#> Field04 0.70098                                                                                 
#> Field05 0.28691 0.476702  0.911  0.952                                                          
#> Field06 0.72620                                                                                 
#> Field07 0.48152                                                                                 
#> Field08 0.00353 0.000122  0.370  0.370  0.401  0.532  0.779                                     
#> Field09 0.36220                                                                                 
#> Field10 0.08630                                                                                 
#>         PIRP 12
#> Field01        
#> Field02        
#> Field03        
#> Field04        
#> Field05        
#> Field06        
#> Field07        
#> Field08        
#> Field09        
#> Field10        
#> Rank 5 
#>         PIRP 0 PIRP 1 PIRP 2 PIRP 3 PIRP 4 PIRP 5 PIRP 6 PIRP 7 PIRP 8 PIRP 9 PIRP 10 PIRP 11 PIRP 12
#> Field01 0.9627                                                                                       
#> Field02 0.9959                                                                                       
#> Field03 0.9947                                                                                       
#> Field04 0.8654                                                                                       
#> Field05 0.9939                                                                                       
#> Field06 0.9178                                                                                       
#> Field07 0.7334                                                                                       
#> Field08 0.5109 0.4442 0.5939 0.9174                                                                  
#> Field09 0.4062 0.5193 0.6496 0.6786  0.851                                                           
#> Field10 0.0874 0.0278 0.0652 0.0429  0.110  0.117  0.118  0.163  0.217  0.275   0.262   0.257    0.95
#> 
#> Marginal Rankluster Reference Matrix
#>         Rank 1 Rank 2 Rank 3 Rank 4 Rank 5
#> Field01 0.6538 0.8216 0.8923 0.9198  0.963
#> Field02 0.0756 0.5069 0.8736 0.9713  0.996
#> Field03 0.1835 0.3320 0.8030 0.9696  0.995
#> Field04 0.3819 0.4931 0.6271 0.7010  0.865
#> Field05 0.0500 0.2072 0.6182 0.9263  0.994
#> Field06 0.0985 0.2541 0.4550 0.7262  0.918
#> Field07 0.2176 0.3119 0.3738 0.4815  0.733
#> Field08 0.0608 0.1723 0.2718 0.5700  0.863
#> Field09 0.0563 0.1101 0.1799 0.3622  0.715
#> Field10 0.0237 0.0359 0.0431 0.0863  0.377
#> 
#> IRP Indices
#>         Alpha         A Beta         B Gamma C
#> Field01     1 0.1677977    1 0.6538429     0 0
#> Field02     1 0.4312713    2 0.5068824     0 0
#> Field03     2 0.4710088    2 0.3320336     0 0
#> Field04     4 0.1643891    2 0.4930958     0 0
#> Field05     2 0.4110466    3 0.6182062     0 0
#> Field06     3 0.2712108    3 0.4549879     0 0
#> Field07     4 0.2518684    4 0.4815211     0 0
#> Field08     3 0.2982121    4 0.5699954     0 0
#> Field09     4 0.3528379    4 0.3621986     0 0
#> Field10     4 0.2906998    5 0.3769977     0 0
#>                               Rank 1  Rank 2  Rank 3 Rank 4 Rank 5
#> Test Reference Profile         4.915   8.744  13.657 18.867 26.488
#> Latent Rank Ditribution      163.000  91.000 102.000 91.000 68.000
#> Rank Membership Dsitribution 148.275 103.002 105.606 86.100 72.017
#> 
#> Latent Field Distribution
#>            Field 1 Field 2 Field 3 Field 4 Field 5 Field 6 Field 7 Field 8 Field 9 Field 10
#> N of Items       3       2       2       1       3       3       4       2       8        7
#> 
#> Model Fit Indices
#>                    value
#> model_log_like -6804.899
#> bench_log_like -5891.314
#> null_log_like  -9862.114
#> model_Chi_sq    1827.169
#> null_Chi_sq     7941.601
#> model_df        1088.000
#> null_df         1155.000
#> NFI                0.770
#> RFI                0.756
#> IFI                0.892
#> TLI                0.884
#> CFI                0.891
#> RMSEA              0.036
#> AIC             -348.831
#> CAIC           -4968.595
#> BIC            -4966.485
#> Strongly ordinal alignment condition was satisfied.

もちろん、様々な種類のプロットもサポートしています。

# Show bicluster structure
plot(result.LDB, type = "Array")

# Test Response Profile
plot(result.LDB, type = "TRP")

# Latent Rank Distribution
plot(result.LDB, type = "LRD")

# Rank Membership Profiles for first 9 students
plot(result.LDB, type = "RMP", students = 1:9, nc = 3, nr = 3)

# Field Reference Profiles
plot(result.LDB, type = "FRP", nc = 3, nr = 2)

このモデルでは、各ランクと各フィールドの正答数を視覚化するField PIRPプロファイルを描画することができます。

plot(result.LDB, type = "FieldPIRP")

バイクラスターネットワークモデル

バイクラスターネットワークモデル(BINET)は、ベイジアンネットワークモデルとバイクラスタリングを組み合わせたモデルです。BINETはLDBやLDRと非常に似ています。

最も重要な違いは、LDBではノードがフィールドを表すのに対し、BINETではクラスを表すことです。BINETは各潜在フィールド(これがlocusとなります)における潜在クラス間の局所依存構造を探索します。

この分析を実行するには、データセットに加えて、探索的バイクラスタリング時に使用したのと同じフィールド対応ファイル、およびクラス間の隣接行列が必要です。

# Create field configuration vector for item assignment
conf <- c(1, 5, 5, 5, 9, 9, 6, 6, 6, 6, 2, 7, 7, 11, 11, 7, 7, 12, 12, 12, 2, 2, 3, 3, 4, 4, 4, 8, 8, 12, 1, 1, 6, 10, 10)

# Create edge data for network structure between classes
edges_data <- data.frame(
  "From Class (Parent) >>>" = c(
    1, 2, 3, 4, 5, 7, # Dependencies in various fields
    2, 4, 6, 8, 10,
    6, 6, 11, 8, 9, 12
  ),
  ">>> To Class (Child)" = c(
    2, 4, 5, 5, 6, 11, # Target classes
    3, 7, 9, 12, 12,
    10, 8, 12, 12, 11, 13
  ),
  "At Field (Locus)" = c(
    1, 2, 2, 3, 4, 4, # Field locations
    5, 5, 5, 5, 5,
    7, 8, 8, 9, 9, 12
  )
)

# Save edge data to temporary file
edgeFile <- tempfile(fileext = ".csv")
write.csv(edges_data, file = edgeFile, row.names = FALSE)

このモデルには3つの要素が必要です:

  1. 項目のフィールド割り当て(confベクトル)
  2. 各フィールドのクラス間ネットワーク構造
  3. クラス数とフィールド数
# Fit Bicluster Network Model
result.BINET <- BINET(
  U = J35S515,
  ncls = 13, # Maximum class number from edges (13)
  nfld = 12, # Maximum field number from conf (12)
  conf = conf, # Field configuration vector
  adj_file = edgeFile # Network structure file
)

# Display model results
print(result.BINET)
#> Total Graph
#>         Class01 Class02 Class03 Class04 Class05 Class06 Class07 Class08 Class09 Class10 Class11
#> Class01       0       1       0       0       0       0       0       0       0       0       0
#> Class02       0       0       1       1       0       0       0       0       0       0       0
#> Class03       0       0       0       0       1       0       0       0       0       0       0
#> Class04       0       0       0       0       1       0       1       0       0       0       0
#> Class05       0       0       0       0       0       1       0       0       0       0       0
#> Class06       0       0       0       0       0       0       0       1       1       1       0
#> Class07       0       0       0       0       0       0       0       0       0       0       1
#> Class08       0       0       0       0       0       0       0       0       0       0       0
#> Class09       0       0       0       0       0       0       0       0       0       0       1
#> Class10       0       0       0       0       0       0       0       0       0       0       0
#> Class11       0       0       0       0       0       0       0       0       0       0       0
#> Class12       0       0       0       0       0       0       0       0       0       0       0
#> Class13       0       0       0       0       0       0       0       0       0       0       0
#>         Class12 Class13
#> Class01       0       0
#> Class02       0       0
#> Class03       0       0
#> Class04       0       0
#> Class05       0       0
#> Class06       0       0
#> Class07       0       0
#> Class08       1       0
#> Class09       0       0
#> Class10       1       0
#> Class11       1       0
#> Class12       0       1
#> Class13       0       0

#> Estimation of Parameter set
#> Field 1 
#>          PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1   0.000                     
#> Class 2   0.554  0.558  0.649       
#> Class 3   0.740                     
#> Class 4   0.859                     
#> Class 5   0.875                     
#> Class 6   0.910                     
#> Class 7   0.868                     
#> Class 8   0.889                     
#> Class 9   0.961                     
#> Class 10  0.932                     
#> Class 11  0.898                     
#> Class 12  0.975                     
#> Class 13  1.000                     
#> Field 2 
#>          PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.0000                     
#> Class 2  0.0090                     
#> Class 3  0.0396                     
#> Class 4  0.6813  0.785  0.637       
#> Class 5  0.4040  0.728  0.696       
#> Class 6  0.6877                     
#> Class 7  0.8316                     
#> Class 8  0.8218                     
#> Class 9  1.0000                     
#> Class 10 0.9836                     
#> Class 11 1.0000                     
#> Class 12 1.0000                     
#> Class 13 1.0000                     
#> Field 3 
#>          PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1   0.000                     
#> Class 2   0.177                     
#> Class 3   0.219                     
#> Class 4   0.206                     
#> Class 5   0.189  0.253              
#> Class 6   1.000                     
#> Class 7   1.000                     
#> Class 8   1.000                     
#> Class 9   0.986                     
#> Class 10  1.000                     
#> Class 11  0.973                     
#> Class 12  1.000                     
#> Class 13  1.000                     
#> Field 4 
#>          PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.0000                     
#> Class 2  0.0127                     
#> Class 3  0.1228                     
#> Class 4  0.0468                     
#> Class 5  0.1131                     
#> Class 6  0.6131  0.436  0.179       
#> Class 7  0.9775                     
#> Class 8  0.9539                     
#> Class 9  0.9751                     
#> Class 10 0.9660                     
#> Class 11 0.9411  0.925  0.757       
#> Class 12 1.0000                     
#> Class 13 1.0000                     
#> Field 5 
#>          PSRP 1 PSRP 2  PSRP 3 PSRP 4
#> Class 1  0.0000                      
#> Class 2  0.0157                      
#> Class 3  0.0731  0.330 0.06789       
#> Class 4  0.9626                      
#> Class 5  0.1028                      
#> Class 6  0.2199                      
#> Class 7  0.1446  0.265 0.00602       
#> Class 8  0.9403                      
#> Class 9  0.2936  0.298 0.12080       
#> Class 10 0.8255                      
#> Class 11 0.9123                      
#> Class 12 1.0000  1.000 1.00000       
#> Class 13 1.0000                      
#> Field 6 
#>          PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1   0.000                     
#> Class 2   0.236                     
#> Class 3   0.275                     
#> Class 4   0.449                     
#> Class 5   0.414                     
#> Class 6   0.302                     
#> Class 7   0.415                     
#> Class 8   0.469                     
#> Class 9   0.560                     
#> Class 10  0.564                     
#> Class 11  0.614                     
#> Class 12  0.764                     
#> Class 13  1.000                     
#> Field 7 
#>          PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.0000                     
#> Class 2  0.0731                     
#> Class 3  0.0810                     
#> Class 4  0.1924                     
#> Class 5  0.1596                     
#> Class 6  0.1316                     
#> Class 7  0.1263                     
#> Class 8  0.1792                     
#> Class 9  0.7542                     
#> Class 10 0.9818  0.883  0.933  0.975
#> Class 11 0.3047                     
#> Class 12 0.7862                     
#> Class 13 1.0000                     
#> Field 8 
#>            PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.00e+00                     
#> Class 2  9.83e-05                     
#> Class 3  3.70e-02                     
#> Class 4  3.91e-02                     
#> Class 5  4.21e-02                     
#> Class 6  6.88e-02                     
#> Class 7  4.56e-01                     
#> Class 8  1.65e-01  0.192              
#> Class 9  6.15e-01                     
#> Class 10 3.88e-01                     
#> Class 11 3.16e-01                     
#> Class 12 1.00e+00  1.000              
#> Class 13 1.00e+00                     
#> Field 9 
#>            PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.00e+00                     
#> Class 2  3.13e-16                     
#> Class 3  1.61e-02                     
#> Class 4  6.15e-01                     
#> Class 5  3.46e-02                     
#> Class 6  5.26e-02                     
#> Class 7  1.44e-11                     
#> Class 8  2.09e-01                     
#> Class 9  1.90e-17                     
#> Class 10 8.09e-01                     
#> Class 11 1.00e+00  1.000              
#> Class 12 7.81e-01  0.703              
#> Class 13 1.00e+00                     
#> Field 10 
#>          PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.0000                     
#> Class 2  0.0952                     
#> Class 3  0.1798                     
#> Class 4  0.1741                     
#> Class 5  0.1594                     
#> Class 6  0.1789                     
#> Class 7  0.1208                     
#> Class 8  0.1550                     
#> Class 9  0.2228                     
#> Class 10 0.2602                     
#> Class 11 0.1724                     
#> Class 12 0.3109                     
#> Class 13 1.0000                     
#> Field 11 
#>            PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.00e+00                     
#> Class 2  6.13e-14                     
#> Class 3  8.84e-07                     
#> Class 4  8.14e-02                     
#> Class 5  2.46e-02                     
#> Class 6  2.13e-02                     
#> Class 7  2.56e-02                     
#> Class 8  3.84e-16                     
#> Class 9  2.44e-01                     
#> Class 10 4.30e-01                     
#> Class 11 3.84e-02                     
#> Class 12 5.86e-01                     
#> Class 13 1.00e+00                     
#> Field 12 
#>            PSRP 1 PSRP 2 PSRP 3 PSRP 4
#> Class 1  0.00e+00                     
#> Class 2  2.35e-03                     
#> Class 3  5.57e-02                     
#> Class 4  1.50e-18                     
#> Class 5  2.02e-02                     
#> Class 6  1.67e-02                     
#> Class 7  1.93e-02                     
#> Class 8  4.62e-02                     
#> Class 9  1.85e-02                     
#> Class 10 2.54e-02                     
#> Class 11 5.76e-15                     
#> Class 12 2.26e-01                     
#> Class 13 1.00e+00      1      1      1
#> Local Dependence Passing Student Rate
#>     Field Field Item 1 Field Item 2 Field Item 3 Field Item 4 Parent Class Parent CCR 1 Parent CCR 2
#> 1   1.000       Item01       Item31       Item32                     1.000        0.000        0.000
#> 2   2.000       Item11       Item21       Item22                     2.000        0.005        0.018
#> 3   2.000       Item11       Item21       Item22                     3.000        0.034        0.068
#> 4   3.000       Item23       Item24                                  4.000        0.221        0.190
#> 5   4.000       Item25       Item26       Item27                     5.000        0.147        0.050
#> 6   4.000       Item25       Item26       Item27                     7.000        0.999        0.991
#> 7   5.000       Item02       Item03       Item04                     2.000        0.005        0.040
#> 8   5.000       Item02       Item03       Item04                     4.000        0.996        0.998
#> 9   5.000       Item02       Item03       Item04                     6.000        0.263        0.334
#> 10  5.000       Item02       Item03       Item04                     8.000        0.980        0.958
#> 11  5.000       Item02       Item03       Item04                    10.000        0.943        0.800
#> 12  7.000       Item12       Item13       Item16       Item17        6.000        0.181        0.146
#> 13  8.000       Item28       Item29                                  6.000        0.009        0.129
#> 14  8.000       Item28       Item29                                 11.000        0.359        0.273
#> 15  9.000       Item05       Item06                                  8.000        0.266        0.152
#> 16  9.000       Item05       Item06                                  9.000        0.000        0.000
#> 17 12.000       Item18       Item19       Item20       Item30       12.000        0.158        0.178
#>    Parent CCR 3 Parent CCR 4 Child Class Child CCR 1 Child CCR 2 Child CCR 3 Child CCR 4
#> 1         0.000                    2.000       0.554       0.558       0.649            
#> 2         0.003                    4.000       0.681       0.785       0.637            
#> 3         0.016                    5.000       0.404       0.728       0.696            
#> 4                                  5.000       0.189       0.253                        
#> 5         0.142                    6.000       0.613       0.436       0.179            
#> 6         0.943                   11.000       0.941       0.925       0.757            
#> 7         0.002                    3.000       0.073       0.330       0.068            
#> 8         0.893                    7.000       0.145       0.265       0.006            
#> 9         0.063                    9.000       0.294       0.298       0.121            
#> 10        0.882                   12.000       1.000       1.000       1.000            
#> 11        0.733                   12.000       1.000       1.000       1.000            
#> 12        0.037        0.162      10.000       0.982       0.883       0.933       0.975
#> 13                                 8.000       0.165       0.192                        
#> 14                                12.000       1.000       1.000                        
#> 15                                12.000       0.781       0.703                        
#> 16                                11.000       1.000       1.000                        
#> 17        0.217        0.352      13.000       1.000       1.000       1.000       1.000
#> Marginal Bicluster Reference Matrix
#>         Class1 Class2 Class3 Class4 Class5 Class6 Class7 Class8 Class9 Class10 Class11 Class12 Class13
#> Field1       0  0.587  0.740  0.859  0.875  0.910  0.868  0.889  0.961   0.932   0.898   0.975       1
#> Field2       0  0.009  0.040  0.701  0.609  0.688  0.832  0.822  1.000   0.984   1.000   1.000       1
#> Field3       0  0.177  0.219  0.206  0.221  1.000  1.000  1.000  0.986   1.000   0.973   1.000       1
#> Field4       0  0.013  0.123  0.047  0.113  0.410  0.978  0.954  0.975   0.966   0.874   1.000       1
#> Field5       0  0.016  0.157  0.963  0.103  0.220  0.138  0.940  0.237   0.825   0.912   1.000       1
#> Field6       0  0.236  0.275  0.449  0.414  0.302  0.415  0.469  0.560   0.564   0.614   0.764       1
#> Field7       0  0.073  0.081  0.192  0.160  0.132  0.126  0.179  0.754   0.943   0.305   0.786       1
#> Field8       0  0.000  0.037  0.039  0.042  0.069  0.456  0.179  0.615   0.388   0.316   1.000       1
#> Field9       0  0.000  0.016  0.615  0.035  0.053  0.000  0.209  0.000   0.809   1.000   0.742       1
#> Field10      0  0.095  0.180  0.174  0.159  0.179  0.121  0.155  0.223   0.260   0.172   0.311       1
#> Field11      0  0.000  0.000  0.081  0.025  0.021  0.026  0.000  0.244   0.430   0.038   0.586       1
#> Field12      0  0.002  0.056  0.000  0.020  0.017  0.019  0.046  0.019   0.025   0.000   0.226       1
#>                               Class 1 Class 2 Class 3 Class 4 Class 5 Class 6 Class 7 Class 8 Class 9
#> Test Reference Profile          0.000   3.900   6.001  12.951   8.853  11.428  14.305  17.148  19.544
#> Latent Class Ditribution        2.000  95.000  73.000  37.000  60.000  44.000  43.000  30.000  34.000
#> Class Membership Dsitribution   1.987  82.567  86.281  37.258  60.781  43.222  43.062  30.087  34.435
#>                               Class 10 Class 11 Class 12 Class 13
#> Test Reference Profile          23.589   20.343   27.076       35
#> Latent Class Ditribution        18.000   37.000   27.000       15
#> Class Membership Dsitribution   20.063   34.811   25.445       15
#> 
#> Model Fit Indices
#>                Multigroup Model Saturated Moodel
#> model_log_like -5786.942        -5786.942       
#> bench_log_like -5891.314        0               
#> null_log_like  -9862.114        -9862.114       
#> model_Chi_sq   -208.744         11573.88        
#> null_Chi_sq    7941.601         19724.23        
#> model_df       1005             16895           
#> null_df        1155             17045           
#> NFI            1                0.4132149       
#> RFI            1                0.4080052       
#> IFI            1                1               
#> TLI            1                1               
#> CFI            1                1               
#> RMSEA          0                0               
#> AIC            -2218.744        -22216.12       
#> CAIC           -6486.081        -93954.09       
#> BIC            -6484.132        -93921.32

もちろん、様々な種類のプロットもサポートしています。

# Show bicluster structure
plot(result.BINET, type = "Array")

# Test Response Profile
plot(result.BINET, type = "TRP")

# Latent Rank Distribution
plot(result.BINET, type = "LRD")

# Rank Membership Profiles for first 9 students
plot(result.BINET, type = "RMP", students = 1:9, nc = 3, nr = 3)

# Field Reference Profiles
plot(result.BINET, type = "FRP", nc = 3, nr = 2)

LDPSRプロットは、それぞれの親と比較した、すべての局所依存クラスの合格者率を示します。

# Locally Dependent Passing Student Rates
plot(result.BINET, type = "LDPSR", nc = 3, nr = 2)

Pattern Analysisテーブルとそれに続くDiagnostics & Visualizationテーブルを、Rmarkdownで書き出してみます:

モデル別出力の例

パターン分析

Model IRP FRP TRP ICRP
IRT
LCA
LRA
LRAordinal
Biclustering
IRM
LDLRA
LDB
BINET

診断・可視化

Model LCD/LRD CMP/RMP Array Other
IRT IIC, ICC, TIC
LCA
LRA
LRAordinal ICBR RMP ScoreFreq, ScoreRank
Biclustering
IRM
LDLRA
LDB FieldPIRP
BINET LDPSR

Note: ✓ indicates available output type for the model.

コミュニティとサポート

exametrikaの改善のため、コミュニティの参加とフィードバックを歓迎します。以下が参加方法とサポートの受け方です:

問題の報告

バグを発見した場合や改善の提案がある場合:

  • GitHub IssuesにIssueを開いてください
  • 最小限の再現可能な例を提供してください
  • Rのセッション情報(sessionInfo())を含めてください

ディスカッションとコミュニティ

Github Discussionsでは,次のことができます。

  • 質問をする
  • 使用事例を共有する
  • 機能リクエストについて議論する
  • ヒントやコツを交換する
  • パッケージの開発に関する最新情報を得る

コントリビューション

コミュニティからの貢献を歓迎します:

  • Issuesを通じたバグ報告と機能リクエスト
  • Discussionsを通じた使用例とヒントの共有
  • プルリクエストを通じたコードの改善

重複を避けるため、投稿前に既存のIssuesとDiscussionsをご確認ください。

参考文献

Shojima,K. (2022) Test Data Engineering: Latent Rank Analysis, Biclustering, and Bayesian Network (Behaviormetrics: Quantitative Approaches to Human Behavior, 13), Springer.

今後の更新予定

今後実装予定の機能

多値データ対応

  • 項目反応理論
    • 段階反応モデル(GRM)
    • 部分採点モデル(PCM)
    • 一般化部分採点モデル(GPCM)
  • 潜在構造分析
    • 多値潜在ランクモデル
    • 多値潜在クラス分析
    • 多値データ用拡張バイクラスタリング

現在の開発状況

  • 2値反応モデル:✅ 実装済み
  • 多値反応モデル:🚧 開発中
  • CRAN投稿:🚧 審査中

開発の進捗状況の確認や希望する機能についてのフィードバックを提供するには、GitHubリポジトリをフォローし、Discussionsに参加してください。

引用

DOI